我有 2 个结果集。第一个结果集包含数据库 1 中表 1 的记录,第二个结果集包含数据库 2 中表 2 的记录。我需要结果集 1 中不存在于结果集 2 中的记录列表。为此,我编写了这个逻辑,但它不起作用并抛出以下错误。
java.sql.SQLException:只读结果集的无效操作:deleteRow
if ( table1ResultSet != null )
{
while ( table1ResultSet.next() )
{
final String table1Record = table1ResultSet.getString( 1 );
if ( table2ResultSet != null )
{
while ( table2ResultSet.next() )
{
final String table2Record = table2ResultSet.getString( 1 );
if ( table1Record.toString().equalsIgnoreCase( table2Record.toString() ) )
{
table1ResultSet.deleteRow();
break;
}
}
}
}
}
return table1ResultSet;
最佳答案
该异常说明了问题所在 - 您的结果集不支持删除。为了获得可更新的结果集,有一些要求:
当您准备语句时,您是否使用 ResultSet.CONCUR_UPDATABLE 来制作它?
查询只能从单个表中进行选择,而无需任何联接操作。 查询必须选择所有不可为空的列以及所有没有默认值的列。查询不能使用“SELECT *”。无法选择派生列或聚合,例如一组列的 SUM 或 MAX。
在进行您正在做的事情之前,您可能希望将结果集移动到 Java 集中,因为使用 deleteRow 实际上会从数据库中删除该行(除非这是预期的结果)
但是您的代码还有另一个问题。即使删除有效,您的代码也会在结果集 1 的第二次迭代中失败,因为您从未重置 table2ResultSet,并且对于第二次迭代,table2resulset 中不会有更多结果。
但最重要的是。为什么您要经历所有这些麻烦并获取您不需要的所有行,而不是使用单个查询来完成,例如:
select * from table 1 where id not in select id from table 2
或
delete from table 1 where id not in select id from table 2
如果这就是目标
关于java - 我可以像这样比较结果集吗?我面临以下错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50169020/