java - 为什么此代码显示参数索引超出范围异常?

标签 java jdbc prepared-statement sqlexception

java.sql.SQLException: Parameter index out of range (2 > number of parameters, which is 1)

我已检查了本主题中已有的所有答案,但找不到我的问题的解决方案。无论我做什么改变,它都会显示异常。 我的代码段:

public void updatetData() {
    System.out.println("Enter the id of the record you want to update :");
    int updateID = sc.nextInt();


    if(checkDuplicateId(updateID)){
        sql = "UPDATE student SET name = '?', address = '?', email_address = '?', phone_no = '?' WHERE id = ?" ;
        try(Connection con = dbConn.getConnection();
                PreparedStatement stmtUpdate = con.prepareStatement(sql);) {


            System.out.println("\nEnter the name to update : ");
            String name = sc.next();
            System.out.println("\nEnter the address to update : ");
            String address = sc.next();
            System.out.println("\nEnter the email address to update : ");
            String email_address = sc.next();
            System.out.println("\nEnter the phone no to update : ");
            String phone_no = sc.next();


            stmtUpdate.setString(1, name);
            stmtUpdate.setString(2, address);
            stmtUpdate.setString(3, email_address);
            stmtUpdate.setString(4, phone_no);
            stmtUpdate.setInt(5, updateID);

            stmtUpdate.execute();
            System.out.println("Updation completed");


        } catch (SQLException ex) {
            System.out.println("Exception in updateData");
            ex.printStackTrace();
        }
    } else{
        System.out.println("ID doesn't exist!!");
    }
}

**checkDuplicateId方法的代码如下:**

private boolean checkDuplicateId(int id){
    boolean checkDup = false;
    String sql1 = "SELECT * FROM student WHERE id = ?";
    try(Connection con = dbConn.getConnection();
            PreparedStatement stmt = con.prepareStatement(sql1);) {

        stmt.setInt(1, id);

        try(ResultSet rs = stmt.executeQuery();){
            if(rs.next())
                return !checkDup;
            else 
                return checkDup;
        }
    } catch (SQLException ex) {
        System.out.println("Exception occured  in checkduplicate method");
        ex.printStackTrace();
        return false;

    } finally{


    }

最佳答案

您的查询只有一个参数,即最后一个 ?

UPDATE student SET name = '?', address = '?', email_address = '?', phone_no = '?' WHERE id = ?;

您正在使用文字字符串“?”。删除引号。

UPDATE student SET name = ?, address = ?, email_address = ?, phone_no = ? WHERE id = ?;

现在您只需将nameaddressemail_addressphone_no设置为“?”。

关于java - 为什么此代码显示参数索引超出范围异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45183793/

相关文章:

php - 使用准备好的语句 mysqli 获取查询结果

java - 当Java的Scanner类中存在nextInt()方法时,为什么会出现NoSuchElementException?

java - 无法使用捆绑的 Jaxb for Intellij 生成 Java 代码

java - 如何在play框架中使用多个实体管理器-使用spring data JPA?

java - SQLException : Incorrect syntax near 'bit'

php - 当进行相同的 PDO 查询(参数不断变化)时,我是每次都调用prepare(),还是只调用一次?

java - 如何比较java中各自包含原始类型和对象集合的两个对象?

java - 如何防止我的 jComboBox 重置?

java - 首次登录 : HTTP Status 500 - Request processing failed; nested exception is org. springframework.transaction.CannotCreateTransactionException

mysql - 为什么在这种情况下有很多连接(MySQLNonTransientConnectionException)