JDBC 使用 preparedStatement 更新导致 java.sql.SQLException:参数索引超出范围(3 > 参数数量,即 2)
JDBC UPDATE With preparedStatement causing java.sql.SQLException: Parameter index out of range (3 > number of parameters, which is 2)
我面临 java.sql.SQLException: 参数索引超出范围(3 > 参数数量,即 2)。 在更新 [= 的一列或两列时26=]'reset_info' table 有五列(id、mobile_tower_id、reset_value、date_time、clientip)。
'id' 是自动生成的主键。
我想 UPDATE 'reset_value' 特定行
现在源码如下:
Class.forName("com.mysql.jdbc.Driver");
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
String sql = "UPDATE reset_info SET reset_value = ? WHERE id = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1, 100);
ps.setInt(3, 1000);
ps.executeUpdate();
conn.close();
下面是我的堆栈跟踪:
Connecting to database...
java.sql.SQLException: Parameter index out of range (3 > number of parameters, which is 2).
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920)
at com.mysql.jdbc.PreparedStatement.checkBounds(PreparedStatement.java:3813)
at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3795)
at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3840)
at com.mysql.jdbc.PreparedStatement.setInt(PreparedStatement.java:3784)
at cdot.dsa.cfms.dbconnect.NewClass.main(NewClass.java:38)
是否必须为 table 的每一列放置占位符 ('?')?
通过 java.sql.Statement 更新单个列是有效的,但我遇到 java.sql.preparedStatement 的异常。
请帮忙。概念性想法将受到高度赞赏。
您的陈述中的问号(占位符)不超过两个。
因此,这一定会失败:
ps.setInt(3, 1000);
改为
ps.setInt(2, 1000);
这个ps.setInt(3, 1000);
必须是ps.setInt(2, 1000);
因为你只需要占位符。
Is it mandatory for to put placeholder('?') for each column of the table?
占位符用于参数而不是列!
我面临 java.sql.SQLException: 参数索引超出范围(3 > 参数数量,即 2)。 在更新 [= 的一列或两列时26=]'reset_info' table 有五列(id、mobile_tower_id、reset_value、date_time、clientip)。 'id' 是自动生成的主键。 我想 UPDATE 'reset_value' 特定行
现在源码如下:
Class.forName("com.mysql.jdbc.Driver");
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
String sql = "UPDATE reset_info SET reset_value = ? WHERE id = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1, 100);
ps.setInt(3, 1000);
ps.executeUpdate();
conn.close();
下面是我的堆栈跟踪:
Connecting to database...
java.sql.SQLException: Parameter index out of range (3 > number of parameters, which is 2).
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920)
at com.mysql.jdbc.PreparedStatement.checkBounds(PreparedStatement.java:3813)
at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3795)
at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3840)
at com.mysql.jdbc.PreparedStatement.setInt(PreparedStatement.java:3784)
at cdot.dsa.cfms.dbconnect.NewClass.main(NewClass.java:38)
是否必须为 table 的每一列放置占位符 ('?')?
通过 java.sql.Statement 更新单个列是有效的,但我遇到 java.sql.preparedStatement 的异常。
请帮忙。概念性想法将受到高度赞赏。
您的陈述中的问号(占位符)不超过两个。 因此,这一定会失败:
ps.setInt(3, 1000);
改为
ps.setInt(2, 1000);
这个ps.setInt(3, 1000);
必须是ps.setInt(2, 1000);
因为你只需要占位符。
Is it mandatory for to put placeholder('?') for each column of the table?
占位符用于参数而不是列!