比较jdbc中的结果集

时间:2011-07-05 11:43:08

标签: java jdbc resultset

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

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

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

谢谢

4 个答案:

答案 0 :(得分:5)

使用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包含许多有用的功能。使用jOOQ,您可以运行

Result<Record> r1 = create.fetch("select * from tableA");
Result<Record> 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
}

答案 1 :(得分:5)

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

    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++;
    }

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

作为rs1&amp; rs2是不同的对象,它们指向不同的存储位置,因此rs1和rs的比较。 rs2不合适,而是使用下面的代码: -

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

}