大家好日子
我试图从访问数据库导入指定的表,将其存储在H2嵌入式数据库中,以便在本地使用,并在可能的情况下将更改更新回服务器(访问)。
但是,如下面的代码所示,我坚持将动态数据插入到新创建的H2数据库中。
我收到了这个错误
org.h2.jdbc.JdbcSQLException:Column" 1"未找到; SQL语句:
插入用户(ID_USER
,Nt_id
,Name
,Level
,Psw_Admin
)VALUES(1
,*****
,{{ 1}},*******
,ALL
)[42122-181]
如您所见,我已经使用了preparestatement,并使用了引号(因为新创建的列都是VARCHAR)但上述都没有解决问题 这是我的插入代码:
*****
rs是访问db的结果集 conn2是与H2的连接
EDIT1:更正了引用的代码 提前致谢
答案 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
块)。