Invalid column index , update using PreparedStatement

为君一笑 提交于 2019-12-10 19:22:09

问题


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

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