我正在尝试向表中添加行。最初,我有这个代码,但它创建了一个错误,有8列(其他列被更改,最初我只有2列)但我只添加2个值:
PreparedStatement addDate =
con.prepareStatement("insert into contributions values(?,?)");
addDate.setString(2, string);
addDate.execute();
}
然后我尝试了这个:
public void addDateToContributionsTable(String string) throws ClassNotFoundException, SQLException {
if(con == null) {
// get connection
getConnection();
}
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("Select * from contributions");
ResultSetMetaData rsmd = rs.getMetaData();
int columnsNumber = rsmd.getColumnCount();
StringBuilder sb = new StringBuilder();
for(int i= 0; i < columnsNumber; i++){
sb.append("?");
sb.append(",");
}
System.out.println(sb.toString());
System.out.println("insert into contributions values('"+sb.toString()+"')");
PreparedStatement addDate = con
.prepareStatement("insert into contributions values('"+sb.toString()+"')");
addDate.setString(2, string);
addDate.execute();
}
但我仍然遇到同样的错误:
[SQLITE_ERROR] SQL error or missing database (table contributions has 8 columns but 1 values were supplied)
任何帮助将不胜感激。 :)
答案 0 :(得分:0)
值不知道应该在哪里插入,所以我建议为每个值编写列名。
reparedStatement addDate =
con.prepareStatement("insert into contributions (COLUMN_NAMES) values (?,?)");
addDate.setString(2, string);
addDate.execute();
}
答案 1 :(得分:0)
您在SQL中添加了多个绑定参数,但您只绑定了其中一个:
addDate.setString(2, string);
您需要为每个绑定参数调用setXXX()。
如果您确定要使用相同的值,则可以改为使用命名参数,然后您不必多次调用setXXX()。你可以参考这个: Named parameters in JDBC
此外,questionMarksList和StringBuilder sb在两个循环中做同样的事情。
修改强>
如果你的SQL有2个问号,你有2个绑定参数,那么你需要设置两个绑定参数。
e.g。对于具有3个绑定参数的SQL:
INSERT INTO MYTABLE VALUES(?, ?, ?)
您需要提供3个值:
addDate.setString(1, "String1"); // Bind to first question mark
addDate.setString(2, "String2"); // etc.
addDate.setString(3, "String3");
答案 2 :(得分:0)
感谢所有回复我的问题。问题出在多少?每次增加或减少列数时,我都会发表声明。我的陈述唯一的问题是有这个表达式&#39;&#39; 。当我把它改成&#34; + questionMarks +&#34;而不是&#39;&#34; + questionMarks +&#34;&#39;,它起作用了。无论我使用多少setXXX()方法的数量多少?与表上的列数相同,它将起作用。有了下面的代码,我没有遇到任何错误。
PreparedStatement addmembers = con
.prepareStatement("insert into membersdata values "+questionMarks+"");
addmembers.setString(2, name);
addmembers.setString(3, accounts);
addmembers.setString(4, email);
addmembers.execute();