SQLException参数索引超出范围

SQLException参数索引超出范围

本文介绍了java.sql.SQLException参数索引超出范围(1>参数个数,为0)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

验证我选择的选择组合框后,我无法将其插入我的数据库中。 Tomcat给出以下错误:

After validation of select combo box which I have selected and I am not able to insert it in my database. Tomcat gives following error:

这是怎么造成的,如何解决?

How is this caused and how can I solve it?

推荐答案

当您在 PreparedStatement setXxx()方法时,您将收到此错误c>,而SQL查询字符串没有任何占位符

You will get this error when you call any of the setXxx() methods on PreparedStatement, while the SQL query string does not have any placeholders ? for this.

例如,错误

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查询字符串以指定占位符。

You need to fix the SQL query string accordingly to specify the placeholders.

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 开头,你做需要引用这些占位符,如下所示:

Note the parameter index starts with 1 and that you do not need to quote those placeholders like so:

String sql = "INSERT INTO tablename (col1, col2, col3) VALUES ('?', '?', '?')";

否则你仍然会得到相同的异常,因为SQL解析器会将它们解释为实际的字符串值因此无法找到占位符。

Otherwise you will still get the same exception, because the SQL parser will then interpret them as the actual string values and thus can't find the placeholders anymore.



  • JDBC tutorial - prepared statements

这篇关于java.sql.SQLException参数索引超出范围(1>参数个数,为0)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-04 13:51