2017-07-19 8 views
0

ます。java.sql.SQLException:(1ある2>パラメータの数、)範囲外のパラメータインデックスこのコードが範囲外のパラメータインデックスを示す理由を教えてください。

私はこのトピックで、すでにすべての答えをチェックしましたが、解決策を見つけることができませんでした私の問題のために。どのような変更を行っても、例外が表示されます。 私のコードセグメント:

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{ 


    } 
+0

'? 'プレースホルダを囲む単一引用符を削除します。 – Berger

答えて

2

あなたのクエリでは、一つのパラメータのみ、最後?を持っています。

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

あなたはリテラル文字列を使用しています '?'。引用符を削除します。今あなただけnameaddressemail_addressphone_noを "?" に設定されている

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

+0

ありがとうございました:) – Gourab27

関連する問題