java jdbc 分页_JDBC在javaweb中的应用之分页数据查询

---恢复内容开始---

分页查询

分页查询是java web开发中经常使用到的技术。在数据库中数据量非常大的情况下,不适合将所有的数据全部显示到一个页面中,同时为了节约程序以及数据库的资源,就需要对数据进行分页查询操作。

通过JDBC实现分页的方法比较多,而且不同的数据库机制其分页的方式也不同,这里我们介绍典型的两个分页方法。

1.通过ResultSet的光标实现分页

该分页方法可以在各种数据库之间通用,但是带来的缺点是占用了大量的资源,不适合在数据库大的情况下使用。

2.通过数据库机制进行分页

很多数据库都会提供这种分页机制,例如SQLServer中就提供了top关键字,mysql数据库中提供了limit关键字,用这些关键字都可以设置数据返回的记录数。使用这种分页查询方式可以减少数据库的资源开销,提高程序效率,但是缺点是只适应于一种数据库。

注:因为第一种不适合在数据量大的情况下使用,所以在实际开发中也不使用该方式来查询数据,我们只对第二种方式做介绍

例:通过mysql的数据分页机制来实现商品信息的分页查询功能,并将信息显示在jsp页面中

(1)创建一个商品信息属性Product类,用来保存商品属性,此类为JavaBean

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.bean;2

3 public classProduct {4 public static final int PAGE_SIZE = 2; //每一页显示几行数据5 //编号

6 private intid;7 //名称

8 privateString name;9 //价格

10 private doubleprice;11 //数量

12 private intnum;13 //单位

14 privateString unit;15 public intgetId() {16 returnid;17 }18 public void setId(intid) {19 this.id =id;20 }21 publicString getName() {22 returnname;23 }24 public voidsetName(String name) {25 this.name =name;26 }27 public doublegetPrice() {28 returnprice;29 }30 public void setPrice(doubleprice) {31 this.price =price;32 }33 public intgetNum() {34 returnnum;35 }36 public void setNum(intnum) {37 this.num =num;38 }39 publicString getUnit() {40 returnunit;41 }42 public voidsetUnit(String unit) {43 this.unit =unit;44 }45 }46

47 Product.java代码

Product.java代码

java中一般静态常量我们采用大写字母表示。这是一种java书写规范

(2)创建BookDao类,此类中主要实现了getConnection()方法连接到数据库的操作以及分页查询所有信息的方法find(int page)、查询记录总数的方法findCount()。代码如下:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.bean;2 importjava.sql.Connection;3 importjava.sql.DriverManager;4 importjava.sql.PreparedStatement;5 importjava.sql.ResultSet;6 importjava.sql.SQLException;7 importjava.sql.Statement;8 importjava.util.ArrayList;9 importjava.util.List;10 public classBookDao {11 publicConnection getConnection() {12 //数据库连接

13 Connection conn = null;14 try{15 //加载数据库驱动,注册到驱动管理器

16 Class.forName("com.mysql.jdbc.Driver");17 //数据库连接字符串

18 String url = "jdbc:mysql://localhost:3306/db_database10";19 //数据库用户名

20 String username = "root";21 //数据库密码

22 String password = "123456";23 //创建Connection连接

24 conn =DriverManager.getConnection(url,username,password);25

26 }catch(ClassNotFoundException e) {27 e.printStackTrace();28 }catch(SQLException e) {29 e.printStackTrace();30 }31 returnconn;32 }33

34 /**

35 * 分页查询所有信息36 *@parampage 页数37 *@returnList38 */

39 public List find(intpage){40

41 //创建List

42 List list = new ArrayList();43 //获取数据库连接

44 Connection conn =getConnection();45 //分页查询的SQL语句

46 String sql = "select * from tb_product order by id desc limit ?,?";47 try{48 //获取PreparedStatement

49 PreparedStatement ps =conn.prepareStatement(sql);50 //SQL语句中的第1个参数赋值

51 ps.setInt(1, (page - 1) *Product.PAGE_SIZE);52 //对SQL语句中的第2个参数赋值

53 ps.setInt(2, Product.PAGE_SIZE);54 //执行查询操作

55 ResultSet rs =ps.executeQuery();56 //光标向后移动,并判断是否有效

57 while(rs.next()) {58 //实例化Product

59 Product p = newProduct();60 //对id属性赋值

61 p.setId(rs.getInt("id"));62 //对name属性赋值

63 p.setName(rs.getString("name"));64 //对num属性赋值

65 p.setNum(rs.getInt("num"));66 //对price属性赋值

67 p.setPrice(rs.getDouble("price"));68 //对unit属性赋值

69 p.setUnit(rs.getString("unit"));70 //将Product添加到List结合中

71 list.add(p);72 }73 //关闭ResultSet

74 rs.close();75 //关闭PreparedStatement

76 ps.close();77 //关闭Connection

78 conn.close();79 }catch(SQLException e) {80 e.print

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值