JavaH2动态插入数据
大家好 我试图从access db导入指定的表,将其存储在H2嵌入式db中,以便在本地使用,并在连接可能时将更改更新回服务器(access)。 但是,正如下面的代码所示,我在向新创建的H2数据库动态插入数据时遇到了困难。 我得到了这个错误 org.h2.jdbc.JdbcSQLException:未找到列“1”;SQL语句: 在用户(JavaH2动态插入数据,java,sql,h2,Java,Sql,H2,大家好 我试图从access db导入指定的表,将其存储在H2嵌入式db中,以便在本地使用,并在连接可能时将更改更新回服务器(access)。 但是,正如下面的代码所示,我在向新创建的H2数据库动态插入数据时遇到了困难。 我得到了这个错误 org.h2.jdbc.JdbcSQLException:未找到列“1”;SQL语句: 在用户(ID\u USER,Nt\u ID,Name,Level,Psw\u Admin)中插入值(1,*****,*********,ALL,,*******/code>
ID\u USER
,Nt\u ID
,Name
,Level
,Psw\u Admin
)中插入值(1
,*****
,*********
,ALL
,,*******/code>)[42122-181]
正如您所看到的,我使用了preparedstatement,并使用了引号(因为新创建的列都是VARCHAR all),但上述所有操作都没有解决这个问题
以下是我的插入代码:
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();
while(rs.next()){
字符串对象=”;
字符串项=”;
对于(inti=1;i,在另一个论坛上,有人提出了这个解决方案,它成功了,所以我发布了它,也许它会帮助其他人
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!");
String additif=“值(”;
对于(int i1=1;i1,您的问题似乎是对字符串值使用反勾号(`)。请改用撇号(')
还应添加一些错误处理(try
块).如果你不是被迫自己做这件事,那么你应该考虑使用像Hibernate这样的JPA框架来为你处理所有与数据库相关的东西。这将避免类似的问题。@Tom如果他需要将更改同步回服务器,JPA可能只会使事情复杂化。你应该重新阅读一篇关于准备状态的教程因为您似乎不明白它们是如何工作的。@JB Nizet:我尝试过将preparedstatement与“?”和.setString(1,item)一起使用;但仍然不起作用我遇到了相同的错误我甚至尝试过这个斜体粗体String sqlstm=“INSERT INTO Users”+”(“+columnnamepst3+”)值(“+item+”);语句pst3=conn2.createStatement();pst3.executeUpdate(sqlstm);pst3.close();
但仍然存在相同的错误
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();
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();