我在我的应用程序中使用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)
答案 0 :(得分:2)
确保创建允许可更新PreparedStatement
的{{1}}。如果您致电Connection#prepareStatement(String sql, int resultSetType, int resultSetConcurrency)
并传递:
ResultSet
为ResultSet.TYPE_SCROLL_SENSITIVE
参数。resultSetType
为ResultSet.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();
}
的这些值,则可能会失败。