1、import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import com.cosmow.pageresultset.entity.Bars; * TODO dao class TestPageResultSetDAO * * Revision History * 2008-7-7,Cosmo,created itpublic class TestPageResultSetD
2、AO private final String FIND_BARS_PAGE = SELECT * FROM YYBARS ORDER BY id; /* */* * 提供JDBC连接方法,返回一个Connection的实例 * return * throws SQLException private Connection getConnection() throws SQLException try final String url = jdbc:oracle:thin:localhost:1521:ORCL final String user = store final String pa
3、ssword = store_password Class.forName(oracle.jdbc.driver.OracleDriver); Connection con = DriverManager.getConnection(url, user, password); return con; catch (ClassNotFoundException e) throw new SQLException(e.getMessage(); * 逻辑分页方法一,该方法使用移位(rs.next)来进行 * param currentPage * 当前页 * param showRows * 一页
4、显示的数据量 public List pageListOne(int currentPage, int showRows) Connection con = null; PreparedStatement ps = null; ResultSet rs = null; ArrayList resultList = new ArrayList= skipBegin & currentNum skipEnd) Bars bar = new Bars(); bar.setId(rs.getLong(id); bar.setName(rs.getString(name bar.setType(rs.g
5、etInt(type bar.setCreatorId(rs.getLong(creator_id resultList.add(bar); if (currentNum = skipEnd - 1) break; currentNum+; catch (SQLException e) e.printStackTrace(); finally if (rs != null) rs.close(); if (ps ! ps.close(); if (con ! con.close(); return resultList;2.逻辑分页的第二种方式利用Scrollable ResultSets(可
6、滚动结果集合)来快速定位到某个游标所指定的记录行,所使用的是ResultSet的absolute()方法。改进代码如下: * 逻辑分页方法二,使用absolute()方法分页 pageListTwo(int currentPage, int showRows) / 利用rs.absolute进行定位 if (!rs.absolute(skipBegin) if (skipBegin if (skipBegin = skipEnd - 1)虽然和第一种方式区别不大,单效率比ResultSet滚动要好,但是absolute()方法并不是所有jdbc驱动都支持。可用如下代码测试当前jdbc驱动是否支
7、持可滚动结果集:int type = rs.getType();if (type = ResultSet.TYPE_SCROLL_INSENSITIVE | type = ResultSet.TYPE_SCROLL_SENSITIVE) System.out.println(Result set is scrollableelseResult set is not scrollable二.物理分页利用数据库本身的一些特性来分页。即:利用了数据库对sql语法的优化,提高分页性能。1.针对Oracle数据库a.根据所使用的数据库特性来组织sql进行分页。b.每次跳转页面的sql查询都不相同。 通用
8、的sql分页方式,“限制行数结果集的倒序”分页,步骤如下: (1).取得符合条件的所有结果集中可以唯一标识的Key值(通常是主键),并正向排序。 (2).利用数据库提供的特殊方法进行“最大结果集”的限制(在Oracle中使用rownum, sql server中使用top, mysql中使用limit.), 该“最大结果集”指包含当前所处页的所有记录数,“最大结果集”应该只包含惟一的Key值。 (3).对步骤(2)中的“最大结果集”进行逆序,并取得“显示当前页显示数量的结果集”,该结果集中只包含惟一的Key值。 (4).通过步骤(3)中所取得的Key值取得显示数据,该显示数据就是当前页应该显示
9、的数据。代码如下: /针对Oracle private final String FIND_BARS_ORACLE = select b3.* from + (select b1.id from (select b.id from yybars b where rownum = ? order by b.id desc) b1 where rownum order by b1.id desc) b2, yybars b3 where b2.id = b3.id order by b2.id * 物理分页方法一针对Oracle,使用sql语句的id查询来进行 pageListThree(int
10、currentPage, int showRows) ps = con.prepareStatement(FIND_BARS_ORACLE); /传入参数,第一个参数标示包含该页总共有几条数据 ps.setInt(1, showRows * currentPage); /第二个参数标示将取得在第一个参数所指定的数据中应该显示的数据 ps.setInt(2, showRows);2.针对MySQL数据库在MySQL数据库中offset关键字的意思是越过,而limit关键字的意思是“限制”,利用这两者结合可轻松分页。(1)取得符合条件的结果集,包含全字段。(2)利用offset关键字越过一段结果集
11、(被越过的结果集就是(当前页 - 1) * 一页显示数)。(3)利用limit关键字限制取得一段结果集(被限制取得的结果集就是一页显示数) private final String FIND_BARS_MYSQL = select * from yybars order by id limit ? offset ? * 物理分页方法二针对mysql,使用sql语句的limit和offset来进行分页 pageListFour(int currentPage, int showRows) ps = con.prepareStatement(FIND_BARS_MYSQL); /传入参数,第一个参数表示显示几条记录(limit关键字的含义) ps.setInt(1, showRows); /第二个参数表示丢弃几条记录(offset关键字的
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1