无效的列索引,使用 PreparedStatement 更新
Posted
技术标签:
【中文标题】无效的列索引,使用 PreparedStatement 更新【英文标题】:Invalid column index , update using PreparedStatement 【发布时间】:2012-03-12 04:35:08 【问题描述】:我正在使用 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)
【问题讨论】:
【参考方案1】:下面的2是指问号在查询字符串中的位置,不是数据库表中列的位置,也不是查询中使用的列名的顺序:
pst.setString(2, "java10"); // yeah second column is jfname
改用 1。
pst.setString(1, "java10"); // first question mark is jfname
【讨论】:
你节省了我的时间。干得好。【参考方案2】:请仔细阅读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();
【讨论】:
以上是关于无效的列索引,使用 PreparedStatement 更新的主要内容,如果未能解决你的问题,请参考以下文章