code: public static String getPagingClause (String sql,Criteria crt) {
          if (null == sql ) return null;
          if (null == crt) return sql;
  
          if (crt.getLimit()>0) {
              String databaseType = JibuConfig.getProperty("databaseType");
              if("Derby".equals(databaseType)) {
                  // 参考 ：http://db.apache.org/derby/docs/dev/ref/rrefsqljoffsetfetch.html
                  return  sql  + " OFFSET "+crt.getStart()+" ROWS FETCH NEXT "+crt.getLimit()+" ROWS ONLY ";
              } else if("PostgreSQL".equals(databaseType) || "MySQL".equals(databaseType)) {
                  return  sql  + " LIMIT "+crt.getLimit()+" OFFSET "+crt.getStart()+" ";
              } else if("Oracle".equals(databaseType)) {
                  // http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:127412348064
                  return (" SELECT * \n"+ 
                          " FROM ( SELECT a.*, rownum rnum \n"+
                          "        FROM ( "+ sql +" ) a \n"+
                          "        WHERE rownum < "+(crt.getStart()+crt.getLimit())+" ) \n"+
                          " WHERE rnum >= "+crt.getStart());
              }
          }
          return sql;
      }
docs: 通过 criteria 生成分页的 SQL 语句。
  <p>
  必须在 WHERE 子句全部处理完以后条用。如果有 ORDER BY，也要在其之前调用。
  Derby 10.5，Oracle 8 以后版本有效。</p>
  
  @param sql 要处理语句。
  @param crt 传递分页信息。
  @return 有效的 sql语句。
  @see #getWhereClause(String sql)