如何操作结果集

时间:2014-05-09 05:10:55

标签: java resultset

我在我的应用程序中使用java和postgres。 我从数据库中获取数据,并使用我的逻辑来对照存储在结果集中的数据。之后我想通过语句

操纵结果集的第二个字段
 rs.updateString(2,s);

是我操作结果集的方法是正确的。因为我无法通过上述语句更改存储在结果集中的数据,并且在执行上述语句时,我得到了异常。请帮忙......

使用建议后我修改了程序,我的代码是

    Connection con = getNonTConnection();
    ResultSet rs = null;
    try {
    String strSQL = "Query for fetching two fields from database";
    pstmt=con.prepareStatement(strSQL,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
    pstmt.setString(1, locationID);
    log.debug(pstmt);
    rs = pstmt.executeQuery();
    while (rs.next())
    {
        piscode = rs.getString("pis_code").trim();
        password = rs.getString("pis_passwd").trim(); 
        passwdMatched = checkPassword(piscode,password); // return true or false 
        if(passwdMatched)
            s="true";
        else 
            s="false";
        rs.updateString(2,s);// this statement still result in error 
     }

我得到的错误列表

org.postgresql.util.PSQLException: The column name location not found.
13602ms [AWT-EventQueue-0] DEBUG: 2014-May-09 @ 12:35:58,327 (JRXmlDigesterFactory.java:createParser:1333)
Using SAX parser factory class net.sf.jasperreports.engine.xml.JRReportSaxParserFactory
at org.postgresql.jdbc1.AbstractJdbc1ResultSet.findColumn(AbstractJdbc1ResultSet.java:673)
at org.postgresql.jdbc2.AbstractJdbc2ResultSet.isUpdateable(AbstractJdbc2ResultSet.java:1351)
at org.postgresql.jdbc2.AbstractJdbc2ResultSet.updateValue(AbstractJdbc2ResultSet.java:1517)
at org.postgresql.jdbc2.AbstractJdbc2ResultSet.updateString(AbstractJdbc2ResultSet.java:1122)
修改

后的代码中的

 rs.updateRow();

我仍然有错误

     org.postgresql.util.PSQLException: The column name location not found.
at org.postgresql.jdbc1.AbstractJdbc1ResultSet.findColumn(AbstractJdbc1ResultSet.java:673)
at org.postgresql.jdbc2.AbstractJdbc2ResultSet.isUpdateable(AbstractJdbc2ResultSet.java:1351)
at org.postgresql.jdbc2.AbstractJdbc2ResultSet.updateValue(AbstractJdbc2ResultSet.java:1517)
at org.postgresql.jdbc2.AbstractJdbc2ResultSet.updateString(AbstractJdbc2ResultSet.java:1122)
at org.postgresql.jdbc2.AbstractJdbc2ResultSet.updateString(AbstractJdbc2ResultSet.java:1211)

1 个答案:

答案 0 :(得分:2)

确保创建允许可更新PreparedStatement的{​​{1}}。如果您致电Connection#prepareStatement(String sql, int resultSetType, int resultSetConcurrency)并传递:

,这将有效
  • ResultSetResultSet.TYPE_SCROLL_SENSITIVE参数。
  • resultSetTypeResultSet.CONCUR_UPDATABLE参数。

代码示例:

resultSetConcurrency

更多信息:

请注意,如果您的JDBC驱动程序不支持Connection con = ... String sql = "SELECT ..."; PreparedStatement pstmt = con.prepareStatement( sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet rs = pstmt.executeQuery(); while (rs.next()) { //... String s = ...; //... rs.updateString(2,s); //important! rs.updateRow(); } 的这些值,则可能会失败。