Неверный индекс столбца, обновление с использованием PreparedStatement - PullRequest
3 голосов
/ 22 февраля 2012

Я обновляю таблицу, используя 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();

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)

Ответы [ 2 ]

9 голосов
/ 22 февраля 2012

2 в дальнейшем относится к положению вопросительного знака в строке запроса, а не к положению столбца в таблице базы данных и не к порядку имен столбцов, используемых в запросе:

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

Используйте 1 вместо.

pst.setString(1, "java10"); // first question mark is jfname
1 голос
/ 22 февраля 2012

Пожалуйста, ознакомьтесь со спецификациями метода setString():

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

Правильный подход:

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

int i = pst.executeUpdate();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...