2012-02-21 110 views
3

我使用PreparedStatement的無效的列索引,更新使用PreparedStatement的

下面的代碼工作完美

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

更新表,但是當我試圖這樣它拋出異常

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

int i = pst.executeUpdate(); 

堆棧跟蹤:

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) 

回答

9

2以下指的是問號的位置查詢字符串,而不是列的數據庫表中的位置,而不是在查詢中使用的列名的順序:

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

用1來代替。

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

謝謝你,我是啞巴:( – invariant 2012-02-21 20:49:47

+0

你救了我的時間..做得好。 – Karuna 2017-06-10 00:11:33