Invalid column index , update using PreparedStatement

15,104

Solution 1

2 in following refers to the position of the question mark in query string, not to the position of column in database table and not to the order of column names used in query:

 pst.setString(2, "java10"); // yeah second column is jfname

Use 1 instead.

pst.setString(1, "java10"); // first question mark is jfname

Solution 2

Please go through the setString() method specs:

http://docs.oracle.com/javase/1.4.2/docs/api/java/sql/PreparedStatement.html#setString%28int,%20java.lang.String%29

The correct approach is :

pst = conn.prepareStatement("UPDATE playjdbc SET jlname ='javafx10new' WHERE jfname =?");
pst.setString(1, "java10"); 

int i = pst.executeUpdate();
Share:
15,104
invariant
Author by

invariant

Twitter : @chandu0101 GitHub : https://github.com/chandu0101 Bitbuket : https://bitbucket.org/chandu0101 Software Engineer ,scala,scalajs,reactjs, Java ,JavaFX ,dart,angular, OpenSource .. Looking for a freelance projects..

Updated on July 08, 2022

Comments

  • invariant
    invariant almost 2 years

    I am updating table using PreparedStatement

    the following code works perfectly

    pst = conn.prepareStatement("UPDATE playjdbc SET jlname ='javafx10new' WHERE jfname = 'java10'");
    int i = pst.executeUpdate();
    

    but when i tried like this it throwing exception

     pst = conn.prepareStatement("UPDATE playjdbc SET jlname ='javafx10new' WHERE jfname =?");
     pst.setString(2, "java10"); // yeah second column is jfname
    
     int i = pst.executeUpdate();
    

    stacktrace :

    java.sql.SQLException: Invalid column index
        at oracle.jdbc.driver.OraclePreparedStatement.setStringInternal(OraclePreparedStatement.java:5330)
        at oracle.jdbc.driver.OraclePreparedStatement.setString(OraclePreparedStatement.java:5318)
        at oracle.jdbc.driver.OraclePreparedStatementWrapper.setString(OraclePreparedStatementWrapper.java:282)
        at com.indus.database.EmployeeDTO.updateData(EmployeeDTO.java:114)