【问题标题】:Sorted Result Set from DB not apprearring in order while printed in Java使用 Java 打印时,来自 DB 的排序结果集未按顺序显示
【发布时间】:2013-10-02 12:24:49
【问题描述】:

终于缩小了问题的范围,这就是我的问题,当我执行一个带有“order by”的 SQL 并尝试在 Java 中打印结果集时,结果集没有排序。 但是当我与我的 SQL 开发人员单独执行 SQL 时,我看到了有序的结果,这是为什么?有没有办法解决这个问题?

下面提到的是我正在使用的方法

List getDBValues(short orderBy) throws Exception {
        Connection conn = null;
        ResultSet rs   = null;
        List results = nmull;
        String sqlStmt = new String();
        PreparedStatement ps = null;
        try {
            conn = Utilities.getConnection(DB);
            sqlStmt ="SELECT 
                        COLUMN1, 
                        COLUMN2, 
                        COLUMN3, 
                        FROM SAMPLE_TABLE 
                        WHERE 
                        COLUMN1 IN ('10','15') AND 
                        COLUMN3 IN ('1','2') ORDER BY ? ";

            try {
                short orderByObj = 0;

                if(orderBy < 1){
                    orderByObj = Short.parseShort(Math.abs(orderBy)+"");
                    sqlStmt += "DESC";
                }else{
                    orderByObj = orderBy;
                }

                System.out.println("==================== SQL ==================== \n"+sqlStmt);
                ps = conn.prepareStatement(sqlStmt);

                ps.setLong(1, orderByObj);

                rs = ps.executeQuery();
                while (rs.next())                               
                    System.out.println(rs.getString(1)+"\t"+rs.getString(2)+"\t"+rs.getString(3));
            }
            catch(SQLException e) {
                e.printStackTrace();
            }

        }
        catch (Exception e) {
            e.printStackTrace()
        }
        return results;

    }

【问题讨论】:

  • 你将它存储在什么样的集合中?
  • @SotiriosDelimanolis,它是一个自定义对象的集合。
  • 你的意思是Collection?那是一个接口,我们关心的是实际的实现……
  • 发布您正在处理的代码会很有用。
  • 您将不得不显示更多代码。并且不要在评论中发布它,编辑您的原始问题。

标签: java sql jsp sorting collections


【解决方案1】:

您不能在 order by 语句中使用绑定变量。

您必须将其附加到查询中。

        sqlStmt ="SELECT 
                    COLUMN1, 
                    COLUMN2, 
                    COLUMN3, 
                    FROM SAMPLE_TABLE 
                    WHERE 
                    COLUMN1 IN ('10','15') AND 
                    COLUMN3 IN ('1','2') ORDER BY ";            
        try {
            short orderByObj = 0;

            if(orderBy < 1){
                orderByObj = Short.parseShort(Math.abs(orderBy)+"");
                sqlStmt = sqlStmt + " " + orderByObj + " DESC";
            }else{
                sqlStmt = sqlStmt + " " + orderBy ;
            }

            System.out.println("==================== SQL ==================== \n"+sqlStmt);
            ps = conn.prepareStatement(sqlStmt);

            rs = ps.executeQuery();
            while (rs.next())                               
                System.out.println(rs.getString(1)+"\t"+rs.getString(2)+"\t"+rs.getString(3));
        }

【讨论】:

  • 会尝试同样的方法,并让您知道是否成功。
【解决方案2】:

您的 JSP 迭代可能有问题。 写出您在此处使用的代码。我都是java,jsp。

使用 LinkedList 类型的集合来存储与插入顺序相关的数据。

【讨论】:

    【解决方案3】:

    冒着显而易见的风险,这是否与您的 SQL 查询实际上并未对数据进行排序这一事实有关?也许您的意思是用正确的ORDER 语句重写,例如:

    SELECT column1, column2 FROM table ORDER BY column1 DESC
    

    【讨论】:

    • 嗨@Nicolas,按列引用的顺序同样有效。 SELECT column1, column2 FROM table ORDER BY 1 DESC,当我从 SQL 开发人员运行此查询时,它给了我排序结果
    • 刚刚阅读了这个,事实证明你是对的,ORDER BY 1 表示按结果集中第一个字段的值排序。我不知道!
    猜你喜欢
    • 2018-03-19
    • 1970-01-01
    • 2020-04-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    • 2013-09-05
    • 2020-07-09
    • 1970-01-01
    相关资源
    最近更新 更多