java.sql.SQLException: 参数索引超出范围 - 字符串中的空格
java.sql.SQLException: Parameter index out of range - whitespaces in String
我正在尝试通过 ServletClass 中的 PreparedStatement 更新数据库中的 table。它引发 java.sql.SQLException: Parameter index out of range (2 > number of parameters, is 1)。我想,问题是 car 字符串由更多的单词组成,所以它包含空格,但我不知道如何解决它。我试图删除准备好的语句中第二个问号周围的两个撇号,但没有帮助。去掉引号后,还是报错:
java.sql.SQLException: Can not issue data manipulation statements with executeQuery()
这是代码的摘录:
private void updateCarAvailability(int value, String car) throws Exception {
Connection conn = null;
PreparedStatement prst = null;
try {
conn = ds.getConnection();
String sql = "update cars set available=? where name='?'";
prst = conn.prepareStatement(sql);
prst.setInt(1, value);
prst.setString(2, car);
prst.executeQuery(sql);
}
去掉 ?
两边的单引号
String sql = "update cars set available=? where name=?";
不需要它们,因为实际值不是作为 SQL 语句的一部分传递的,而是作为绑定参数传递的。并且绑定参数不需要"SQL formatting"。
解决方案是删除 where name='?'
上的 '
,因此它应该看起来像 update cars set available=? where name=?
,并且您还应该将 executeQuery
更改为 execute
, 一旦您使用了更新命令。
我正在尝试通过 ServletClass 中的 PreparedStatement 更新数据库中的 table。它引发 java.sql.SQLException: Parameter index out of range (2 > number of parameters, is 1)。我想,问题是 car 字符串由更多的单词组成,所以它包含空格,但我不知道如何解决它。我试图删除准备好的语句中第二个问号周围的两个撇号,但没有帮助。去掉引号后,还是报错:
java.sql.SQLException: Can not issue data manipulation statements with executeQuery()
这是代码的摘录:
private void updateCarAvailability(int value, String car) throws Exception {
Connection conn = null;
PreparedStatement prst = null;
try {
conn = ds.getConnection();
String sql = "update cars set available=? where name='?'";
prst = conn.prepareStatement(sql);
prst.setInt(1, value);
prst.setString(2, car);
prst.executeQuery(sql);
}
去掉 ?
String sql = "update cars set available=? where name=?";
不需要它们,因为实际值不是作为 SQL 语句的一部分传递的,而是作为绑定参数传递的。并且绑定参数不需要"SQL formatting"。
解决方案是删除 where name='?'
上的 '
,因此它应该看起来像 update cars set available=? where name=?
,并且您还应该将 executeQuery
更改为 execute
, 一旦您使用了更新命令。