【问题标题】:Invalid column index , update using PreparedStatement无效的列索引,使用 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)

【问题讨论】:

    标签: java jdbc oracle11g


    【解决方案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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-01
      • 1970-01-01
      • 2015-05-25
      • 1970-01-01
      • 1970-01-01
      • 2012-12-02
      相关资源
      最近更新 更多