NutzCN Logo
问答 动态表,如何获取FIELD的值,不通过GETFIELD
发布于 2560天前 作者 qq_09dec3d3 2018 次浏览 复制 上一个帖子 下一个帖子
标签:

一动态表,已得到数据值存放在OBJ中为一LIST对象,如何得到每个数据的字段值?不用get set

22 回复

Record对象?

不是obj = J4E.fromExcel(in, Class.forName(classname),null);

我还在玩这个

Mirror mirror = Mirror.me(obj);
mirror.getValue(obj,"属性名");

问题是动态表的属性名不固定啊

如果知道属性名,那就能用GET之类的吧

我就是想获取每条记录的每个字段的值

难道非得要一条条从EXCEL表中读?

老大有招吗?

获取对象的字段 然后循环调用

Mirror mirror = Mirror.me(obj);
mirror.getValue(obj,"属性名");

Mirror遍历字段就行啦

话说,**fromExcels** 返回是列表吧,循环一下咯

returnstr="文件导入数据库成功";  
          obj = J4E.fromExcel(in, Class.forName(classname),null);
          int fieldcount=dao.getEntity(Class.forName(classname)).getMappingFields().size();
          int [] objfieldslen=new int[fieldcount];
          int [] objfieldslen1=new int[fieldcount];
          String [] fieldname=new String[fieldcount];
          for(int count=0;count<fieldcount;count++)
          {
              
              fieldname[count]=dao.getEntity(Class.forName(classname)).getMappingFields().get(count).getName().trim();
              Sql sql = Sqls.fetchInt(String.format("select max(len(rtrim(%s)))*2 from %s",fieldname[count],dao.getEntity(Class.forName(classname)).getTableName()));
              
              
                  objfieldslen[count]=dao.execute(sql).getInt();
                  objfieldslen1[count]=dao.execute(sql).getInt();
                      
                              
              
             
          }
        
          
          
          for(int count=0;count<obj.size();count++)
          {
              for(int count1=0;count1<fieldcount;count1++)
              {
                Mirror mirror = Mirror.me(obj.get(count));
                int getvaluelen=0;
                if( mirror.getValue(obj.get(count),fieldname[count1])!=null)
                     getvaluelen=getWordCount(mirror.getValue(obj.get(count),fieldname[count1]).toString());
                if(objfieldslen1[count1]<getvaluelen)
                   objfieldslen1[count1]=getvaluelen;
              }
          }
          String sqlcomm="";
          for(int count=0;count<fieldcount;count++)
          {
              if(objfieldslen1[count]!=objfieldslen[count])
              {
                 if(fieldname[count]!="id")
                  sqlcomm=String.format("alter table %s  alter column %s char(%d);",dao.getEntity(Class.forName(classname)).getTableName(),fieldname[count],objfieldslen1[count]);
                  
              }
              
          }
          Sql sql = Sqls.create(sqlcomm);
          dao.execute(sql);
           for(int count=0;count<=obj.size()/1000;count++)
           {
               if(obj.size()-count*1000>=1000)
                  dao.fastInsert(obj.subList(count*1000, (count+1)*1000));                   
               else
                   dao.fastInsert(obj.subList(count*1000, obj.size()));                   
           }
           /*int count=0;
           for(count=0;count<obj.size();count++)
           {
              dao.insert(obj.get(count));
           }*/
              dao.update(Class.forName(classname),Chain.make("drsj",currdate1.parse(currdate)),Cnd.where("drsj","is",null));

用这个满足了我的要求

如何在SQL中就得到每个字段值的字符个数?SQL把中文字符也算成了一个

在SQLservice中可以用datalength,可以得到正确的字符数,中文当成两个字符,但如果数据库为空,则用取数会出错

select datalength(字段名) from数据表

len的方式,中文字符只算一个

不晓得ORACL支持不

那是取数据的最大长度的吧,不是字段的长度吧?

是啊,是字段值的长度

哦对,我用的时候加了rtrim()

添加回复
请先登陆
回到顶部