【发布时间】:2020-08-10 13:25:20
【问题描述】:
在执行准备好的语句时出现参数索引超出范围错误。我还有其他几个正常工作的语句。此查询的唯一区别是它是唯一的 UPDATE。其余的都是 INSERT、ADD、DELETE 等。任何关于我可能做错的指导将不胜感激。
sqlStatement = "UPDATE customer SET customerName = ?, addressId = ? WHERE customerId = ?;";
StatementHandler.setPreparedStatement(ConnectionHandler.connection, sqlStatement);
StatementHandler.getPreparedStatement().setString(1, name);
StatementHandler.getPreparedStatement().setInt(2, AddressDAO.getAddressId(address));
StatementHandler.getPreparedStatement().setInt(3, customerId);
StatementHandler.getPreparedStatement().executeUpdate();
错误:
java.sql.SQLException: Parameter index out of range (3 > number of parameters, which is 1).
我在代码块中间放了几个打印语句,它似乎在第三个参数上失败了。所有传入的值都是有效的,并且与分配的类型相匹配。正在使用 MySQL,如果在控制台中执行,该语句可以正常工作。
感谢您的阅读以及您能提供的任何帮助。
编辑:这也是我正在使用的语句处理程序方法。我正在梳理,看看我还应该添加什么来帮助解决这个问题。谢谢你们的cmets!
public class StatementHandler {
/**
* create statement reference
*/
private static PreparedStatement preparedStatement;
/**
* method to create statement object
*/
public static void setPreparedStatement(Connection connection, String sqlStatement) throws SQLException {
preparedStatement = connection.prepareStatement(sqlStatement);
}
/**
* getter to return statement object
*/
public static PreparedStatement getPreparedStatement(){
return preparedStatement;
}
}
【问题讨论】:
-
看来
StatementHandler.getPreparedStatement()每次都返回的不是同一个实例,你能添加这个方法的代码吗?还要记住,如果StatementHandler被不同的线程调用,准备好的语句对象很可能在两个getPreparedStatement()调用之间被替换。
标签: java mysql jdbc prepared-statement