2012-09-24 95 views
0
 List userProcessedCountCol = new ArrayList(); 
        while (iResultSet1.next()) { 
         afRealTimeIssuance afRealTimeIssuance = new afRealTimeIssuance(); 
         Integer i = 0; 

         afRealTimeIssuance.setSub_channel(iResultSet1.getString(++i)); 
         afRealTimeIssuance.setAgent_names(iResultSet1.getString(++i)); 
         afRealTimeIssuance.setFtd(iResultSet1.getDouble(++i)); 
         afRealTimeIssuance.setMtd(iResultSet1.getDouble(++i)); 
         afRealTimeIssuance.setQtd(iResultSet1.getDouble(++i)); 

         userProcessedCountCol.add(afRealTimeIssuance); 
} 

其中afRealTimeIssuance爲ActionForm如何重新排列java中的結果集數據行?

使用上面的代碼中,我得到類似下面的輸出

1    A    100 
2    B    200 
3    C    300 
4    D    400 

但我想重新排列輸出

2   B    200 
4   D    400 
3   C    300 
1   A    100 

總之我想根據需要重新排列行。如何根據一個特定值排列結果集數據。請指導

回答

0

無法手動重新排列ResultSet(僅適用於sql)。你可以重新排列的是你持有對象的數據結構

你可以使用行對象的ArrayList並在你想要的位置的位置中插入每一行。

讓我們在你的例子說,在while循環:

  • 數據庫級
  • Java級別

userProcessedCountCol.add(index, element); 
+0

以下方式是否正確定義行對象? ArrayList rows = new ArrayList (); – Edward

+0

yeap,非常好,但我認爲你真的需要的是ArrayList rows = new ArrayList (); – MaVRoSCy

0

要麼使用ORDER BY子句中您的SQL查詢,或者使用Comparator<afRealTimeInssuance>Collections.sort()List。前者更容易,將負擔放在數據庫上,後者更通用,因爲您可以根據外部信息進行排序。

在附註中,您應該使用Java conventionsAFRealTimeInssuance而不是afRealTimeInssuance來命名您的課程。

+0

我不希望它在任何順序,即升序或desc.I想安排它,因爲我想要的。 – Edward

+0

以任何您想要的方式實現您的比較器... –

2

可以作爲在兩個層面這裏行事在數據庫級別,操縱要返回的結果順序的唯一方法是使用''ORDER BY ASC/DESC''在你的sql查詢中。請注意,您不能依靠任何其他方式從數據庫獲取排序結果。

在java級別,你可以像這樣存儲你的對象: - 使用可排序的集合。讓你的行動形式可比或實現一個比較器, 允許按照你的意願對元素進行排序。 然後您可以使用This method以您自己的標準獲得有序集合。

你可以考慮使用也TreeSet代替ArrayList的 這個數據結構將允許你只需要添加的數據並考慮到你預先定義將始終排序的比較。不過,添加的對數很複雜,所以它由您來決定。

希望這有助於

0

有兩種方法可以做到這一點。您可以修改查詢以使用ORDER BY子句排列結果。其次,您可以實現Comparator接口並定義您的比較器類並使用Collection.sort(List list,Comparator c)來訂購數據。

+0

SO是一個合作網站(請參閱[常見問題](http://stackoverflow.com/faq#etiquette)),一小時後不需要重複與我的完全相同的答案......它只是增加了噪音。您可以對現有答案發表評論,以便他們得到改進,一旦您的聲譽達到50。 –