Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JDBC使用preparedStatement进行更新,导致java.sql.SQLException:参数索引超出范围(3>参数数,即2)_Java_Mysql_Jdbc_Prepared Statement - Fatal编程技术网

JDBC使用preparedStatement进行更新,导致java.sql.SQLException:参数索引超出范围(3>参数数,即2)

JDBC使用preparedStatement进行更新,导致java.sql.SQLException:参数索引超出范围(3>参数数,即2),java,mysql,jdbc,prepared-statement,Java,Mysql,Jdbc,Prepared Statement,我面临java.sql.SQLException:参数索引超出范围3>参数数量,即2。更新“重置信息”表中的一列或两列时,该表有五列id、移动id、重置值、日期时间、客户端。 “id”是自动生成的主键。 我想更新特定行的“重置值” 下面是源代码: Class.forName("com.mysql.jdbc.Driver"); System.out.println("Connecting to database..."); conn = Driver

我面临java.sql.SQLException:参数索引超出范围3>参数数量,即2。更新“重置信息”表中的一列或两列时,该表有五列id、移动id、重置值、日期时间、客户端。 “id”是自动生成的主键。 我想更新特定行的“重置值”

下面是源代码:

        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)
是否必须为表的每一列放置占位符“?”

通过java.sql.Statement更新单个列是可行的,但我发现java.sql.preparedStatement异常


请帮忙。非常感谢您提出的概念性想法。

您的陈述中只有两个问号。 因此,这必须失败:

ps.setInt(3, 1000);
换成

ps.setInt(2, 1000);

在您的声明中,问号持有人不超过两个。 因此,这必须失败:

ps.setInt(3, 1000);
换成

ps.setInt(2, 1000);
本ps.SETINT31000;必须是ps.setInt2,1000;因为你只需要占位符

是否必须为表的每一列放置占位符“?”

占位符用于参数而不是列

这个ps.setint31000;必须是ps.setInt2,1000;因为你只需要占位符

是否必须为表的每一列放置占位符“?”


占位符用于参数而不是列

我看不出投反对票的理由……这是有效的。找到解决办法了。谢谢大家。我看不出投反对票的理由……这是有效的。找到解决办法了。谢谢大家,非常感谢。我把“参数”和“列”弄错了。非常感谢。我把“参数”和“列”弄错了。