2

JSFページネーションに使用されるこのJavaコードがあります:

public List<ActiveSessionObj> list(int firstRow, int rowCount, String sortField, boolean sortAscending) throws Exception {

        String SQL_LIST_BY_ORDER_AND_LIMIT = "SELECT * FROM ACTIVESESSIONSLOG ORDER BY ? ? LIMIT ?, ?";



        if (ds == null) {
            throw new SQLException();
        }

        String sortDirection = sortAscending ? "ASC" : "DESC";
        String sql = String.format(SQL_LIST_BY_ORDER_AND_LIMIT, sortField, sortDirection);
        Connection conn = ds.getConnection();
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        List<ActiveSessionObj> dataList = new ArrayList<ActiveSessionObj>();

        try {
            conn.setAutoCommit(false);
            boolean committed = false;
            preparedStatement = conn.prepareStatement(sql);
            preparedStatement.setString(1, sortField);
            preparedStatement.setString(2, sortDirection);
            preparedStatement.setInt(3, firstRow);
            preparedStatement.setInt(4, rowCount);

            resultSet = preparedStatement.executeQuery();
            /* take the result from the SQL query and insert it into Array List collection */
            dataList = ActiveSessionsArrayList(resultSet);

        } catch (SQLException e) {
            throw new Exception(e);
        } finally {
            conn.close();
        }

        return dataList;
    }

この SQL ステートメントを使用して ArrayList を生成します。

SELECT * FROM ACTIVESESSIONSLOG ORDER BY ? ? LIMIT ?, ?

この SQL クエリは Oracle で使用できますか? それともこれはMySQL固有ですか?

幸運をお祈りしています

4

3 に答える 3

3

LIMITMySQL固有です。rownumただし、Oracleでは次のように使用できます。

SELECT *
FROM (SELECT columnA, columnB, rownum as my_rownum
FROM ACTIVESESSIONSLOG
ORDER BY ? ?) 
WHERE my_rownum <= ? 
AND my_rownum >= ? 
于 2012-04-08T12:50:18.087 に答える
3
Case1: If you want first `twenty Records` only then 

 select * from ( 
     select rn,a.*
     from Activesessionlogs a
     order by ??)
 where rn <=20
 order by rn

Case2:If you want the record between `5 to 10` then

select * from (
select rownum rn,e.* from Activesessionlogs e order by ??)
where rn >=5 and rn<=10 
order by rn 

例: 以下の例を見つけてみましょう

select * from (
select rownum rn,e.* from emp e order by hiredate)
where rn >=5 and rn<=10
order by rn asc

出力

:Rownum> or rownum>=同じクエリでは機能しません。このOracle Rownumを説明する非常に優れたブログ

于 2012-04-08T13:42:51.780 に答える
1

残念ながら、LIMITはOracleでは有効なステートメントではなく、MySqlで使用されます。ただし、oracleには変数ROWNUMがあり、これを使用して返される行数を制限できます。

select * from mytable where rownum <= 100 and rownum > 50

クエリから2番目の50レコードを返します。

于 2012-04-08T12:52:23.380 に答える