2011-10-19 171 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; 
    } 
}