我在MySQL服务器上使用PreparedStatement运行此代码时遇到问题。它之前一直在做np,当时我有一个标准声明。记住:这是一个测试程序,我只是学习这个东西。代码是:
PreparedStatement st = null;
try {
int id = registry.newID("ID");
if (id == 0) {
out.println("Failed to generate a new ID. Terminating dialogue.");
return;
}
String insert = "INSERT INTO registry (ID, NAME, SURNAME, DATE_OF_BIRTH, CITY, STREET) "
+ "VALUES (?, ?, ?, ?, ?, ?);";
st = registry.getConn().prepareStatement(insert);
st.setInt(1, id);
st.setString(2, name);
st.setString(3, surname);
st.setDate(4, date);
st.setString(5, city);
st.setString(6, street);
st.executeUpdate(insert);
registry.getConn().commit();
out.println("Added. Add a number? [y/n] ");
char choice = in.next().charAt(0);
if (choice == 'y') {
addNumber(id, registry);
}
st.close();
} catch (SQLException ex) {
out.println("SQL Exception: " + ex);
}
params如下:
int id;
String name, surname, city, street;
java.sql.Date date;
这给了我以下例外:
SQL异常:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:SQL语法中有错误;检查与您的MySQL服务器版本相对应的手册,以获得正确的语法,以便在'?,?,?,?,?,?)附近使用?'在第1行
为什么不在st.setXXXX语句中设置值?
由于
答案 0 :(得分:2)
问题在于:
st.executeUpdate(insert);
因此,代替PreparedStatement.executeUpdate,您调用Statement.executeUpdate(String sql)并传递带有问号的插入语句。
尝试将此行更改为:
st.executeUpdate();
答案 1 :(得分:-1)
问题在于SQL语法。我怀疑SQL语句末尾的分号。它不属于那里 - 您可能将其复制到您测试查询的其他工具中。