如何比较两个SQL查询语句产生的结果集是否相同???

时间:2021-06-08 19:58:57
我用JDBC连接了MYSQL数据库,对一个表(表的名字叫Coffees)进行的查询操作,我的代码如下:
public class Coffees {
    
    /** Creates a new instance of Coffees */
    public Coffees() {
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Connection con; Statement sql; ResultSet rs;
       try { Class.forName("com.mysql.jdbc.Driver");
        }
       catch(ClassNotFoundException e)
        {System.out.println(""+e + " TEST ");}
       
       try{ con = DriverManager.getConnection("jdbc:mysql://localhost:3306/COFFEES","root","nbuser");
             sql = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                                     ResultSet.CONCUR_READ_ONLY);
             rs = sql.executeQuery("SELECT COF_NAME, PRICE FROM COFFEES ");
             while(rs.next())
             {
                 String name = rs.getString("COF_NAME");
                 Double price = rs.getDouble("PRICE");
                 System.out.println(name + "              " + price);
                 
             }
       
               con.close();
             }
        catch (SQLException sqlexception){
            System.out.println("Exception" + sqlexception);
        }
    }
}
 
我用executeQuery("SELECT COF_NAME, PRICE FROM COFFEES ")查询了一次该表,得到的结果集是:
Colombian              7.99
Colombian_Decaf              8.99
Espresso              9.99
French_Roast              8.99
French_Roast_Decaf              9.99

我如果再次查询一次该表,executeQuery("SELECT COF_NAME , ABS(PRICE) AS PRICE FROM COFFEES"),得到的结果集是:
Colombian              7.9899997711182
Colombian_Decaf              8.9899997711182
Espresso              9.9899997711182
French_Roast              8.9899997711182
French_Roast_Decaf              9.9899997711182

我的问题是: 
如何用JAVA编程实现对这两个结果集进行比较,判断出它们不同?只需要判断出它们是否相同就可以了,谢谢各位大侠能给出指点!!!!


12 个解决方案

#1


直接比较结果集没有特别好的办法,最本的就是将结果集放到List中,然后对两个List进行比较
其实直接对SQL进行控制就OK啦,干嘛非要对结果集进行比较?

#2


谢谢SUREYOR,能不能具体的给出一段代码,怎么把结果集放在LIST中实现比较是否相同,谢谢了

#3


请各位高手救命啊!!!!!

#4


只要循环你的ResultSet对象,一个一个塞进去不就行了?

什么要这么做呢?从SQL上面的确是可以控制的。

#5


谢谢楼上的,请问什么是从SQL控制,我是菜鸟,不太清楚。谢谢赐教

#6


大侠救命啊!!!

#7


help!!!!!

#8


你的比较规则是什么:
  数据精度?
  记录顺序?

#9


是先看两记录条数是否相等.
 若相等,再一条一条比较数据(单个循环就可以了)

#10


谢谢扬扬,我的目的就是当执行不同的SQL查询操作的时候,可能会产生不同的结果集,所以我想比较这些结果集是否相同,比较规则就是看每条相对应的记录是否都完全一样,请问扬扬,能不能给出循环比较的示例代码呢?因为我是初学JAVA,所以不太熟悉,希望您能帮助,谢谢!!!

#11


如果你这两个结果集都没有close,可以这样:

                            rs.last();
rs2.last();
if (rs.getRow() != rs2.getRow()) {
//记录数不等,即结果不等
}
rs.first();
rs2.first();
while (rs.next() && rs2.next()) {
if (Math.abs(rs.getFloat(2) - rs2.getFloat(2)) > 0.00000001) {
                 //记录值不等
                  break;
}
}

#12


如果关闭了其中一个,在关闭前则要吧他保存到一个数组中,比较时保证同步即可.

#1


直接比较结果集没有特别好的办法,最本的就是将结果集放到List中,然后对两个List进行比较
其实直接对SQL进行控制就OK啦,干嘛非要对结果集进行比较?

#2


谢谢SUREYOR,能不能具体的给出一段代码,怎么把结果集放在LIST中实现比较是否相同,谢谢了

#3


请各位高手救命啊!!!!!

#4


只要循环你的ResultSet对象,一个一个塞进去不就行了?

什么要这么做呢?从SQL上面的确是可以控制的。

#5


谢谢楼上的,请问什么是从SQL控制,我是菜鸟,不太清楚。谢谢赐教

#6


大侠救命啊!!!

#7


help!!!!!

#8


你的比较规则是什么:
  数据精度?
  记录顺序?

#9


是先看两记录条数是否相等.
 若相等,再一条一条比较数据(单个循环就可以了)

#10


谢谢扬扬,我的目的就是当执行不同的SQL查询操作的时候,可能会产生不同的结果集,所以我想比较这些结果集是否相同,比较规则就是看每条相对应的记录是否都完全一样,请问扬扬,能不能给出循环比较的示例代码呢?因为我是初学JAVA,所以不太熟悉,希望您能帮助,谢谢!!!

#11


如果你这两个结果集都没有close,可以这样:

                            rs.last();
rs2.last();
if (rs.getRow() != rs2.getRow()) {
//记录数不等,即结果不等
}
rs.first();
rs2.first();
while (rs.next() && rs2.next()) {
if (Math.abs(rs.getFloat(2) - rs2.getFloat(2)) > 0.00000001) {
                 //记录值不等
                  break;
}
}

#12


如果关闭了其中一个,在关闭前则要吧他保存到一个数组中,比较时保证同步即可.