2011-10-19 131 views
2

处理Java ResultSet的最佳方式是什么?我正在创建一个Desktop应用程序,它将使用JDBC连接到一个Oracle数据库。Java中两个ResultSet之间的比较

不过,我在处理ResultSets时遇到了问题,因为我无法使用for循环进行比较。

// create a database connection object 
DB db = new DB(); 

// get rows of my first table and second table 
ResultSet firstRS = db.getMyFirstTable(); 
ResultSet seconRS = db.getSecondTable(); 

// compare the two tables 
while(firstRS.next()) 
{ 
    // get the row of my first table 
    String firstRSRow = firstRS.getString("col1"); 

    while(secondRS.next()) 
    { 
     // get the row of my second table 
     String secondRSRow = seconRS.getString("col1"); 

     // compare row from first table to the row in second table 
     if(firstRSRow.startsWith(secondRSRow)) 
     { 
      // do some processing here.... 
     } // end if 
    } // end while 
} // end while 

我知道,这可能是与Hibernate用几行代码就可以完成,但我没有充裕的时间去研究它。

我也从apache找到了commons DbUtils,但对于我来说,作为新手程序员来说,这看起来很复杂。

是否有其他方式/工具/库/框架足够简单,从数据库中获取ResultSet并以简单直接的方式操作它?

如果您能指引我到一个网站上有关于java数据库连接的示例代码,我也会很感激。

非常感谢您的支持。

回答

0

为什么ResultSet?您可以轻松地将值与SELECT声明进行比较。如果你仍然想要ResultSet,那么考虑一下CachedRowSet

+0

@ user692533 - 这是更好地填充特定列清单并加以比较。 – adatapost

0
DB db = new DB(); 

// get rows of my first table and second table 
ResultSet firstRS = db.getMyFirstTable(); 
ResultSet seconRS = db.getSecondTable(); 

// compare the two tables 
while(firstRS.next() || secondRS.next()) 
{ 
// get the row of my first table 
String firstRSRow = firstRS.getString("col1"); 
String secondRSRow = seconRS.getString("col1") 

    // compare row from first table to the row in second table 
    if(firstRSRow.startsWith(secondRSRow)) 
    { 
     // do some processing here.... 
    } // end if 
} // end while 
-1

ResultSet是Object最终的子类,我们可以直接比较两个或多个对象。有一点具体到你的问题:

ResultSet rs=st.executeQuery(sql1); 
ResultSet rs1=st.executeQuery(sql2); 

其中SQL1和SQL2是2所陈述

while(rs.next() && rs1.next()){ 
    int a=rs.next(); 
    int b=rs1.next(); 
    if(a==b){ 
      System.out.println("Compairing two ResultSets"); 
    } 
} 
+0

rs.next()返回布尔值,不是int – Shilan

+0

#Shilan。你疯了吗?。我正在分享如何去做。不用于编码语句。 –

+0

我相信你还没有意识到rs.next()的概念。当你检查是否rs.next()时,你已经将指针移动到记录前面,通过再次调用指针,向前移动指针并跳过第一条记录!此外,如果你想比较rs1和rs!你应该知道它们是对象,不能像==那样比较。基本上我在这段代码中看不到任何正确的声明! – Shilan

0
public static boolean resultset(String SQL1, String SQL2){ 
    public boolean status=false; 
    ResultSet ViewResultset = st.executeQuery(SQL1); 
     ResultSet QueryResultset = st.executeQuery(SQL2); 

     while (QueryResultset.next() | ViewResultset.next()) 
     if (ViewResultset.getRow() == 0 | QueryResultset.getRow() == 0) { 
     break; 
     } else { 
     for (int i = 1; i < ViewResultset.getMetaData().getColumnCount() + 1; i++) { 
      System.out.println("OOO"+ QueryResultset.getMetaData().getColumnCount()); 
      String columnName = ViewResultset.getMetaData().getColumnName(i); 
     System.out.println("ColumnName :" + columnName); 
    for (int j = 1; j < QueryResultset.getMetaData().getColumnCount() + 1; j++) 
    if (ViewResultset.getMetaData().getColumnName(i).equals(QueryResultset.getMetaData().getColumnName(j))&& !(QueryResultset.getString(columnName) == null || ViewResultset.getString(columnName) == null)) 
    if (ViewResultset.getString(columnName).toUpperCase().contains(QueryResultset.getString(columnName).toUpperCase())) { 
     System.out.println(" Actual "+ ViewResultset.getMetaData().getColumnName(i)  + " Expected: "+ ViewResultset.getString(columnName)); 
     status=true; 

    }  
    else {System.out.println(" Actual "+ ViewResultset.getMetaData().getColumnName(i)  + " Expected: "+ ViewResultset.getString(columnName)); 
    } 
    } 
    } 
    return status; 
    } 
}