我的表结构是这样的id v1 v2 v3 v4 ..... v40(总共41字段)因为插入的数据字段数不定,最长有40个字段,短的就几个(从文件中导入的),现在我插入数据的时候问题来了,insert into语句不好写。用insert into values(XX,XX,XX...)肯定不行,因为插入的数据字段数不定,我不可能补全全部空字段;
用insert into(id,v1,v2,...) values(XX,XX,....)也很麻烦,前面的id,v1,v2,...不定,一条条全部我手动添加也是不现实的,我本来准备用个for循环读文本批量导,但现在不好写了,后面的字段没法添加了,每条数据记录的字段数都不一定。求助,这种字段数不定的文本要导入这张表中该如何写sql呢?不知道大家看懂我的说明了没,如果不明白请指出~

解决方案 »

  1.   

    insert into tab select * from tab where ...
      

  2.   

    感觉直接写SQL的话是不是不太方便,如果使用O/R MAPPING,比如hibernate之类的就方便多了,需要用什么字段直接注入到对象里,没用到的可以不管
      

  3.   

    意思就是说,通过读映射表就知道值是属于那个字段吧?如果是这样可以按4楼去做
    不过不想导入ORM的话,就自己写个BEAN,然后写个插入全属性的insert语句,而“?”号其实就是拿BEAN里面的值,JDBC可以插空值的,所以当遇到字段没有对应的值时,就丢个空值过去就好了
      

  4.   

    简单点就hibernatejdbc也是可以的,判断下读过来是不是空就行了
      

  5.   

    同志们啊 我也想用hibernate 不过为了这个就去动系统的框架我会被灭掉的
    另外直接的jdbc没办法用 我这边读取数据库用的是别人写好的框架 我只能调用方法 杯具了我
    有太多的难言之隐了 7L的写bean的方法还能参照下
      

  6.   

    字段不定就根据 insert into table(这里把字段固定下)
    或是用hibernate
      

  7.   

    如果框架不支持的话,就只能自己去写个方法了。就像楼上说的.   public void creatSql(Entity e)
         {
              StringBuffer sql=new StringBuffer("insert into Table (");
               if(e.a!=“”||!e.a.equals(null))
                   {
                     sql+=e.a;
                   }
                ...
                sql+=") values(";
                 if(e.a!=“”||!e.a.equals(null))
                   {
                     sql+=e.a;
                   }
                 ...
                ...     }
            应该可行..
     
      

  8.   

    自己建立一个同表相同的视图insert into xx
    select * from 视图