2012-09-24 56 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。 –