2017-07-19 3 views
0

java.sql.SQLException: Index de paramètres hors de portée (2> nombre de paramètres, ce qui est 1)Pourquoi ce code affiche-t-il une exception d'index de paramètre hors plage?

J'ai vérifié toutes les réponses déjà dans ce sujet, mais n'a pas pu trouver la solution pour mon problème. Peu importe les changements que je fais, cela montre l'exception. Mon segment de code:

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!!"); 
    } 
} 

** Le code pour la méthode checkDuplicateId est au-dessous: **

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

Supprime les guillemets simples autour des espaces réservés '? '. – Berger

Répondre

2

Votre requête a un seul paramètre, le dernier ?.

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

Vous utilisez une chaîne littérale '?'. Supprimez les guillemets.

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

En ce moment, vous définissez juste name, address, email_address et phone_no à "?".

+0

Merci cela a fonctionné :) – Gourab27