我正在尝试在表格中添加序列号。这是我的方法:
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数据库。
updateLong not allowed because ResultSet is not an updatable ResultSet
根据Derby文档,带有的查询ORDER BY不可更新:
ORDER BY
只有简单的单表SELECT游标才可以更新。可更新ResultSet的SELECT语句与可更新游标的SELECT语句具有相同的语法。生成可更新的游标: 该SELECT语句不能包含ORDER BY子句。 基础查询必须是SelectExpression。 基础查询中的SelectExpression不得包含: DISTINCT 骨料 GROUP BY 条款 HAVING 条款 ORDER BY 条款 FROM基础查询中的子句不能具有: 其FROM子句中有多个表 一个表名以外的任何东西 选择表达式 子查询 如果基础查询具有WHERE子句,则该WHERE子句不能具有子查询。
只有简单的单表SELECT游标才可以更新。可更新ResultSet的SELECT语句与可更新游标的SELECT语句具有相同的语法。生成可更新的游标:
SELECT
DISTINCT
GROUP BY
HAVING
FROM
WHERE
换句话说,您不能包含ORDER BY,但这会违背您的目的(因为您似乎在重新编号一些标识符)。
您可能需要使用一些查询来重新编号而不在JDBC中进行处理,或者您需要使用两个Statement对象,一个用于查询行,另一个用于更新行。
Statement
Derby也不支持TYPE_SCROLL_SENSITIVE结果集。根据文档,Derby支持以下两种:
TYPE_SCROLL_SENSITIVE
TYPE_FORWARD_ONLY
TYPE_SCROLL_INSENSITIVE
请注意,您不需要当前代码,TYPE_SCROLL_INSENSITIVE因为您仅将其作为转发处理。