PreparedStatement没有提出参数

时间:2014-12-08 12:53:59

标签: java mysql jdbc prepared-statement

我在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语句中设置值?

由于

2 个答案:

答案 0 :(得分:2)

问题在于:

st.executeUpdate(insert);

因此,代替PreparedStatement.executeUpdate,您调用Statement.executeUpdate(String sql)并传递带有问号的插入语句。

尝试将此行更改为:

st.executeUpdate();

答案 1 :(得分:-1)

问题在于SQL语法。我怀疑SQL语句末尾的分号。它不属于那里 - 您可能将其复制到您测试查询的其他工具中。