比较jdbc中的结果集

在我的java代码中,我有两个结果集rs1和rs2获得如下:

rs1 = statement.executeQuery("select * from tableA") rs2 = statement.executeQuery("select * from tableB") 

两个表都具有相同的模式,包括字段ID,名称和地址,我想比较两个结果集。 我可以直接做rs1 == rs2吗? 如果没有我应该如何比较两个结果集? 一些例子将非常感激。

谢谢

此代码检查两个结果集的所有列,并且行数必须相等。

  int col = 1; while (rs1.next() && rs2.next()) { final Object res1 = rs1.getObject(col); final Object res2 = rs2.getObject(col); // Check values if (!res1.equals(res2)) { throw new RuntimeException(String.format("%s and %s aren't equal at common position %d", res1, res2, col)); } // rs1 and rs2 must reach last row in the same iteration if ((rs1.isLast() != rs2.isLast())) { throw new RuntimeException("The two ResultSets contains different number of columns!"); } col++; } 

使用JDBC,您必须迭代两个ResultSet对象并比较它们中的每个字段。

如果你可以用SQL做,那我就试试吧

 select * from tableA except -- or minus in oracle select * from tableB 

 select * from tableB except -- or minus in oracle select * from tableA 

两者都应该返回一个空结果

如果您使用图书馆是一个选项,您可以尝试jOOQ (我为jOOQ背后的公司工作)。 jOOQ围绕JDBC包含许多有用的function。 使用jOOQ,您可以运行

 Result r1 = create.fetch("select * from tableA"); Result r2 = create.fetch("select * from tableB"); 

或者:

 r1 = create.fetch(rs1); r2 = create.fetch(rs2); 

接着

 if (r1.equals(r2)) { // the results are equal } else { // the results are not equal } 

rs1和rs2不会是相同的对象,所以比较它们是相当无意义的。 我想你想要比较结果集的内容。

您可以通过rs1.getMetaData()从元数据中获取表方案。

由于rs1和rs2是不同的对象,它们指向不同的内存位置,因此rs1和rs2的比较不合适,而是使用,代码如下: –

 while (rs.next()&& rs1.next()) { int userId = rs.getInt("userId") int userId1 = rs1.getInt("userId") if(userId == userId1){ // do some thing } }