我有这么个个需求,表的结构不确定也许有ID,NAME,DESC,也许表的结构式ID,TAG,NAME,AGE,DESC,也许只有ID这么个作为主键,也许是ID,TAG作为联合主键,现在我要写一条SQL语句,把一条记录插入到这张不确定的表中,怎么拼接字符串,现在我已经实现如下的功能了:
加主键放入到一张Map中,就当是kMap吧,这是所有的主键的名字,主键的值都在里面了,将所有的属性的名字,属性的值都放入到另外一个MAP当中,就当是vMap吧,现在表名也是上面传下来的,我们称之为TABLE吧,这时候我要拼接成这样的:
strSql="INSERT INTO " + table + "("+从kMap中把所有键拿出来并用逗号隔开+") "+values+"("+从MAP中把所有的值拿出来并用逗号隔开+")"+";";
大概就是类似一条普通的SQL插入语句,但是很多东西是放到MAP中的,这样怎么搞字符串拼接了?有知道的麻烦详细写写,谢谢了!!!! 

解决方案 »

  1.   

    我想请问LZ的是:
    1:你的表是本身就有的,还是根据实体创建的.?
    2:主键是否自动增长.?
    3:如果自动增长是什么数据库.? oracle和mysql/sqlserver 的插入形式不一样
      

  2.   

    String col="";//列名
    String val="";//值
    根据map循环
    把map的键设置到col,把map的值设置到val
    循环结束后把col和val中最后的逗号去掉
    然后
    strSql=="INSERT INTO " + table + "("+col+") values("+val+")"+";";
      

  3.   

    楼主,你的这种方式不好,真的。
    如果id是int型,name是string型,你拼的sql如何判断有没有单引号?所以放Map<key,value>这种方式是不完整的,哈哈,偷笑。
      

  4.   

    我以前做的东西,没有hibernate的情况下, 根据实体生成表,并可以增删改查, 这个实现到是不难.! 但是LZ那个貌似要判断很多东西了
      

  5.   

    没有实体对象,直对表进行操作,得到的存储的全部是STIRNG类型的,有人能给个详细点的解决方案吗
      

  6.   

    StringBuilder sBuilder = new StringBuilder();
    sBuild.append("insert into ").append(table);
    然后下面遍历你的Map,把有的列全部写进去(也就是每个entry.getKey()),注意逗号,然后append("values (" ) 然后再遍历那个Map,把你的value都写进来,并且加上'',这样拼下来应该没问题注意相应的空格,逗号和引号别忘记加了.!