Java H2动态插入数据

时间:2014-08-23 08:44:39

标签: java sql h2

大家好日子 我试图从访问数据库导入指定的表,将其存储在H2嵌入式数据库中,以便在本地使用,并在可能的情况下将更改更新回服务器(访问)。 但是,如下面的代码所示,我坚持将动态数据插入到新创建的H2数据库中。 我收到了这个错误     org.h2.jdbc.JdbcSQLException:Column" 1"未找到; SQL语句:     插入用户(ID_USERNt_idNameLevelPsw_Admin)VALUES(1*****,{{ 1}},*******ALL)[42122-181]

如您所见,我已经使用了preparestatement,并使用了引号(因为新创建的列都是VARCHAR)但上述都没有解决问题 这是我的插入代码:

*****

rs是访问db的结果集 conn2是与H2的连接

EDIT1:更正了引用的代码 提前致谢

2 个答案:

答案 0 :(得分:0)

所以在另一个论坛上,有人提出了这个解决方案并且它有效,所以我发布它也许它会帮助别人

 String additif="VALUES (";
                for(int i1=1;i1<=columncount;i1++){
                    if(i1!=columncount){
                        additif=additif+"?,";
                        }else{
                            additif=additif+"?)";
                            }
                    }while (rs.next()){

                    ArrayList<String> object=new ArrayList<String>();

                    for (int i1=1;i1<=columncount;i1++){

                        object.add(""+rs.getObject(i1));

                                System.out.println(object);
                                }
                    PreparedStatement pst3=conn2.prepareStatement("INSERT INTO `"+Tabledb+"`  "+additif);
                    for(int i1=0;i1<object.size();i1++){
                    pst3.setString(i1+1, object.get(i1));}

                            pst3.executeUpdate();
                            pst3.close();
                            System.out.println("Done...next row");
                }

                rs.close();
                conn.close();
                System.out.println("Done!");

答案 1 :(得分:0)

你的问题似乎是使用反引号(`)作为字符串值。改为使用撇号(&#39;)。

while (rs.next()) {
    String object="";
    String item="";
    for (int i=1;i<=columncount;i++) {
        object=rs.getObject(i)+"";
        if (i==1) {
            item="'"+item+object;
        } else if (i==columncount) {
            item=item+"' ,'"+object+"'";
        } else {
            item=item+"' ,'"+object;
        }
        System.out.println(object);
      }
      PreparedStatement pst3=conn2.prepareStatement("INSERT INTO Users ( "+columnnamepst3+" ) VALUES ( "+item+" )");
      pst3.executeUpdate();
      pst3.close();
      System.out.println("Done...next row");
  }
  rs.close();

修改

由于您的列名似乎事先准备好了,您可以使用PrepareStatement的参数传递能力:

String item="";
for (int i = 1; i <= columncount; i++) {
    items += (i == 1 ? "" : ", " ) + "?";
}
PreparedStatement pst3=conn2.prepareStatement("INSERT INTO Users ( "+columnnamepst3+" ) VALUES ( "+item+" )");
while (rs.next()) {
    for (int i=1;i<=columncount;i++) {
        pst3.setString(i,rs.getString(i));
    }
    pst3.executeUpdate();
    System.out.println("Done...next row");
}
pst3.close();
rs.close();

还应添加一些错误处理(try块)。