微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ResultSet中不允许使用updateLong

如何解决ResultSet中不允许使用updateLong

根据Derby文档,带有的查询ORDER BY不可更新:

只有简单的单表SELECT游标才可以更新。可更新ResultSet的SELECT语句与可更新游标的SELECT语句具有相同的语法。生成可更新的游标:

  • 基础查询必须是SelectExpression。
  • 基础查询中的SelectExpression不得包含:
    • disTINCT
    • 骨料
    • GROUP BY 条款
    • HAVING 条款
    • ORDER BY 条款
  • FROM基础查询中的子句不能具有:
    • FROM子句中有多个表
    • 一个表名以外的任何东西
    • 选择表达式
    • 查询
  • 如果基础查询具有WHERE子句,则该WHERE子句不能具有子查询

换句话说,您不能包含ORDER BY,但这会违背您的目的(因为您似乎在重新编号一些标识符)。

您可能需要使用一些查询来重新编号而不在JDBC中进行处理,或者您需要使用两个Statement对象,一个用于查询行,另一个用于更新行。

Derby也不支持TYPE_SCROLL_SENSITIVE结果集。根据文档,Derby支持以下两种:

请注意,您不需要当前代码TYPE_SCROLL_INSENSITIVE因为您仅将其作为转发处理。

解决方法

我正在尝试在表格中添加序列号。这是我的方法:

public void reArrangeTrID(){
String parti = name.getText().toUpperCase();    
long trid = 1;

try{
String query="SELECT LONGDATE,TRID FROM PARTIACCOUNT WHERE PARTY= '"+parti+"' ORDER BY LONGDATE ASC ";
conn = new connection().db();
stmtt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
rs = stmtt.executeQuery(query);
while(rs.next()) {
    long tr = rs.getLong("TRID");
    rs.updateLong("TRID",trid);
    rs.updateRow();
    trid++;
    jLabel9.setText("Arranging transactions... Please wait.");
}
 }

catch (SQLException ex) {
JOptionPane.showMessageDialog(null,"Unknown Error!! Data cannot be displayed!"+ex);
}
finally{try{stmtt.close(); rs.close(); conn.close(); }catch(SQLException ex){}}
}

为什么此方法给我一个错误updateLong not allowed because ResultSet is not an updatable ResultSet,而我的结果集已设置为可更新。我正在使用derby数据库。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。