问题
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)
回答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
回答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();
来源:https://stackoverflow.com/questions/9384804/invalid-column-index-update-using-preparedstatement