java.sql.SQLException 参数索引超出范围(1 >个参数数,即 0) [已关闭]
验证我选择的选择组合框后,我无法将其插入到我的数据库中。Tomcat 给出了以下错误:
java.sql.SQLException:参数索引超出范围(1 >个参数数,即 0)。
这是如何引起的,我该如何解决?
验证我选择的选择组合框后,我无法将其插入到我的数据库中。Tomcat 给出了以下错误:
java.sql.SQLException:参数索引超出范围(1 >个参数数,即 0)。
这是如何引起的,我该如何解决?
当您调用 上的任何方法时,都会收到此错误,而 SQL 查询字符串没有任何占位符。setXxx()
PreparedStatement
?
例如,这是错误的:
String sql = "INSERT INTO tablename (col1, col2, col3) VALUES (val1, val2, val3)";
// ...
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, val1); // Fail.
preparedStatement.setString(2, val2);
preparedStatement.setString(3, val3);
您需要相应地修复 SQL 查询字符串以指定占位符。
String sql = "INSERT INTO tablename (col1, col2, col3) VALUES (?, ?, ?)";
// ...
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, val1);
preparedStatement.setString(2, val2);
preparedStatement.setString(3, val3);
请注意,参数索引以 开头,并且您不需要像这样引用这些占位符:1
String sql = "INSERT INTO tablename (col1, col2, col3) VALUES ('?', '?', '?')";
否则,您仍然会得到相同的异常,因为SQL解析器随后会将它们解释为实际的字符串值,因此无法再找到占位符。
这是 jdbc 驱动程序版本的问题。当我使用mysql-connector-java-commercial-5.0.3-bin.jar但是当我更改为更高驱动程序版本mysql-connector-java-5.1.22.jar时,这个问题得到了解决。