我需要根据表数据结构的第三列对数据进行排序。我尝试根据以下question的答案。但我的排序不起作用。请帮帮我。 这是我的代码。
Object[] data = new Object[y];
rst.beforeFirst();
while (rst.next()) {
int p_id = Integer.parseInt(rst.getString(1));
String sw2 = "select sum(quantity) from tbl_order_detail where product_id=" + p_id;
rst1 = stmt1.executeQuery(sw2);
rst1.next();
String sw3 = "select max(order_date) from tbl_order where tbl_order.`Order_ID` in (select tbl_order_detail.`Order_ID` from tbl_order_detail where product_id=" + p_id + ")";
rst2 = stmt2.executeQuery(sw3);
rst2.next();
data[i] = new Object[]{new String(rst.getString(2)), new String(rst.getString(3)), new Integer(rst1.getString(1)), new String(rst2.getString(1))};
i++;
}
ColumnComparator cc = new ColumnComparator(2);
Arrays.sort(data, cc);
if (i == 0) {
table.addCell("");
table.addCell("");
table.addCell("");
table.addCell("");
} else {
for (int j = 0; j < y; j++) {
Object[] theRow = (Object[]) data[j];
table.addCell((String) theRow[0]);
table.addCell((String) theRow[1]);
table.addCell((String) theRow[2]);
table.addCell((String) theRow[3]);
}
预期输出样本:
Product_code Product_name Quantity Order_date
FK Cake 3000 2010-12-09
CK Jelly 100 2010-09-23
F juice 30 2010-12-09
但我得到的是:
Product_code Product_name Quantity Order_date
CK Jelly 100 2010-09-23
F juice 30 2010-12-09
FK Cake 3000 2010-12-09
答案 0 :(得分:4)
你有太多的事情要发生在这里。您将数据库访问和UI混合到一个方法中。我将这些问题分开了。
我还建议让数据库进行排序。将ORDER BY添加到SELECT中,让数据库完成工作。
我将SELECT中的数据映射到一个具有Comparator进行排序的对象。将ResultSet加载到该对象的List中;你可以用你的所有愿望。
答案 1 :(得分:1)
问题是数据还是比较器?在另一篇文章中,您将展示如何使用硬编码数据创建简单的测试程序。您在此处发布的代码对我们没有帮助,因为我们无法访问您的数据库,也不知道您是否正确访问数据。
输出看起来像按“String”值按升序排序。所以它确实看起来像数据是错误的。我不知道问题是什么,因为看起来你正在为数组添加一个Integer值。
您希望按金额降序输出,因此您需要设置Comparator属性来执行此操作。
无论如何要确保我的Comparator没有问题,我创建了一个简单的测试:
import java.util.*;
public class SortSIJ
{
public static void main(String args[])
{
Object[] data = new Object[3];
data[0] = new Object[] {"CK", "Jelly", new Integer(100), "2010-09-23"};
data[1] = new Object[] {"FK", "Cake", new Integer(3000), "2010-12-09"};
data[2] = new Object[] {"F", "juice", new Integer(30), "2010-12-09"};
ColumnComparator cc = new ColumnComparator(2);
cc.setAscending( false );
Arrays.sort(data, cc);
for (Object row: data)
{
Object[] theRow = (Object[])row;
System.out.println( Arrays.asList(theRow) );
}
}
}
输出看起来很好。我可以建议您修改ColumnComparator以添加以下代码行来验证正在排序的Object类型。
System.out.println(o1.getClass());
当我这样做时,我得到以下输出:
class java.lang.Integer
class java.lang.Integer
[FK, Cake, 3000, 2010-12-09]
[CK, Jelly, 100, 2010-09-23]
[F, juice, 30, 2010-12-09]