-2

最后缩小了问题的范围,这就是我的问题,当我执行一个具有“排序依据”的 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;

    }
4

3 回答 3

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));
        }
于 2013-09-27T08:35:12.310 回答
0

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

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

于 2013-09-26T13:50:24.263 回答
0

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

SELECT column1, column2 FROM table ORDER BY column1 DESC
于 2013-09-26T14:02:09.643 回答