当前位置: 首页 > 面试题库 >

java.sql.SQLException参数索引超出范围(1>参数数量,为0)

贺方伟
2023-03-14
问题内容

关闭。 这个问题需要调试细节。它当前不接受答案。

想改善这个问题吗? 更新问题,使其成为Stack Overflow
的主题。

4年前关闭。

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

java.sql.SQLException:参数索引超出范围(1>参数数量,为0)。

这是怎么引起的,我该如何解决?


问题答案:

当您在上调用任何setXxx()方法时PreparedStatement,都会收到此错误,而SQL查询字符串对此没有任何占位符?

例如,这是 错误的

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教程-准备的语句


 类似资料:
  • 问题内容: 在Java / MariaDb中使用prepareStatement,如以下函数所示 我收到错误消息: java.sql.SQLException:参数索引超出范围(1>参数数量,为0)。 错误行号指向行 问题答案: 正如评论中提到的,您应该删除?中的引号。 另外,在中,应为正。从1开始循环计数。 总结一下:

  • 问题内容: 我使用java和jdbc驱动程序(java.sql),并获得了以下代码: 我得到: 在执行statement.setString(1,clinetIP)时。 这是为什么?statement.setxxx是否在语句字符串中查找问号?我在声明中使用了一个问号,但它似乎被忽略了! 问题答案: 试试这个

  • 问题内容: 在Java / MariaDb中使用prepareStatement,如以下函数所示 我收到错误消息: java.sql.SQLException:参数索引超出范围(1>参数数量,为0)。 错误行号指向行 问题答案: 如评论中所述,您应该删除?中的引号。 另外,在中,应为正。从1开始循环计数。 总结一下:

  • 所以我创建了这个注释: 但当我运行它时,我得到了这个异常: 无法为映射设置参数:ParameterMapping{Property='name',mode=in,javatype=class java.lang.String,JDBCType=varchar,NumericScale=null,ResultMapid='null',JDBCTypeName='null',Expression='n

  • 问题内容: 我已经开始处理我的第一个Java程序,它是一个简单的计算器,但是我得到一个错误,声称我的数组超出范围。我尝试对其进行调试,以了解这样做的原因和原因,并遵循纸上的代码,两者均显示了我期望和期望的结果。因此,我看不到问题出在哪里。代码不完整。 根据调试器,此行出现错误: 这是我当前拥有的代码的主要部分: 这是我收到的错误消息: 问题答案: 当等于中的最后一个元素索引时,则将大于最后一个元素

  • 你好,stackoverflow的好人们!我有一个奇怪的问题,我不明白。我要发布我的两个有问题的方法: 另一个: 所以,我正在根据我在网上找到的一些代码制作一个数独解算器。现在,当我试着调试程序时,我可以很好地检查一些行(并且它按照预期工作),但是一旦程序第一次在方法“resi”中调用“next”方法,它就会崩溃,出现数组索引越界异常。如果我只是尝试在不进行调试的情况下运行该程序,那么在同一方法调