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

无人久伴 提交于 2019-12-22 10:49:44

问题


public class Brothers extends javax.swing.JFrame {

    /**
     * declaring connection and SQL statement
     */

    Connection cn;
    Statement st;
    PreparedStatement pstmt=null;
    PreparedStatement pst;
    ResultSet rs;
    Object fname, mname, lname, bdate, nation, statusq,InstNo,  photo, combo, place, mimi; 
    int status;



    public Brothers() {        
        dbconnect _db = new dbconnect();

/*//////////////the above is just to show that I have two prepared statement each for each sql statement that i have //////////*/
        try {
            Class.forName("com.mysql.jdbc.Driver");
            //String unicode= "?useUnicode=yes&characterEncoding=UTF-8";
            cn = DriverManager.getConnection(_db.getHost(), _db.getUsername(), _db.getPassword());
            st=cn.createStatement(); 

 try{

        String Sql="INSERT INTO brothers(FirstName, MiddleName, LastName, BirthDate, BirthPlace, Nationality, InstituteNumber, Status, Picture) VALUES(?,?,?,?,?,?,?,?,?)";  
        pstmt=cn.prepareStatement(Sql);
        //pstmt.setString(1,txtTrial.getText());('?','?','?','?','?','?','?','?','?')
        pstmt.setString(2,txtFirtsName.getText());
        pstmt.setString(3,txtMiddleName.getText());
        pstmt.setString(4,txtLastName.getText());
        pstmt.setString(5,((JTextField)chooserBirthDate.getDateEditor().getUiComponent()).getText());
        pstmt.setString(6,txtPlacBirth.getText());

        String nations=combonation.getSelectedItem().toString();
        pstmt.setString(7,nations);
        pstmt.setString(8,txtInstituteNo.getText());


        pstmt.setObject(9,combostatus.getSelectedItem());
        pstmt.setBytes(10, person_image);

      pstmt.executeUpdate(Sql);

        JOptionPane.showMessageDialog(null, "Saving Successfull");

        }

        catch(Exception e){

          //JOptionPane.showMessageDialog(null, e);
          e.printStackTrace(); 
    }  

When I try to inset data using the above code it throws an exception:

java.sql.SQLException: Parameter index out of range (10 > number of parameters, which is 9).
    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)

I have tried to look over it but I cant find the problem please help!!


回答1:


You are starting the insert at position 2 instead 1

 pstmt.setString(2,txtFirtsName.getText());

Change it to

pstmt.setString(1,txtFirtsName.getText());

Do the same for the others where the last one will be

pstmt.setBytes(9, person_image);



回答2:


You only have 9 parameters in your SQL statement.

String Sql="INSERT INTO brothers(FirstName, MiddleName, LastName, BirthDate, BirthPlace, Nationality, InstituteNumber, Status, Picture) VALUES(?,?,?,?,?,?,?,?,?)";

When you commented out the first setString method call, you should have renumbered the parameter indices for the following calls. They should be numbered 1 - 9, not 2 - 10.




回答3:


The number of question marks ? must equal to the parameter.

If you have 7 parameter then there should be 7 question marks in your statement i.e insert into table name values(?,?,?,?,?,?,?)




回答4:


The index of the first parameter should be 1 not 2, the index of the last parameter should be 9 not 10. When assigning N parameters, the index goes from 1 to N.




回答5:


use psmt.executeUpdate(); instead of pstmt.executeUpdate(Sql);



来源:https://stackoverflow.com/questions/16196670/java-sql-sqlexception-parameter-index-out-of-range-2-number-of-parameters-w

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!