5.4.1 数据库操作
由于分页搜索并不是一开始就把所有数据都查出来,而是每次只查一批(例如20个),点击下一页,再查询,首先我们要介绍支持这么操作的SQL语句:
之前我们的SQL语句是这样的:
String sql="select * from user where nickname like '%"+keyword+"%' limit 10";我们关注的是后面的limit,这里是关键。
1.limit后面如果只写一个数字,代表只查询前n个,limit100,就是查前100个
2.limit后面如果写了两个数字,用逗号隔开,例如limit10,100 那么意思就是从第10个开始查100个
第二点就是分页查询的关键
那么这个分页函数的参数,必须包含两个整数了,第一个整数代表从哪里开始查,第二个整数代表查几个。这里我们简化一下,第二个参数直接写成20,也就是每页20个结果
任务一:由于我们现在查询每次只查20个,并不知道一共有多少条数据。不知道总数,就无法计算页数。所以需要在UserData增加一个函数,查询总数。
把下面这个函数添加到UserData类:
public static int findUserNumberByRole(String role){ int num=0; // 要执行的sql语句,通过字符串拼接出来 String SQLTEXT="select count(*) from user where role='"+role+"' "; try{ // 使用上面的DBConifg类的getCon方法,建立一个连接 Connection con=DBConfig.getCon(); // 准备执行sql的实体 Statement stmt=con.createStatement(); // 执行sql,并把查询结果赋给rst ResultSet rst=stmt.executeQuery(SQLTEXT); while(rst.next()){ // 查询结果,并转换成整数,赋给num num=Integer.parseInt(rst.getString("count(*)")); } // 安装后使用先关闭原则,关闭各个对象,特别是con如果不关闭,会造成连接泄露 rst.close(); stmt.close(); con.close(); } catch(SQLException e){ e.printStackTrace(); } return num;}任务二:
在UserData里添加一个函数,它的功能是根据角色分页查询,命名为findUsersByRolePage(String role,int from),这个函数将用来替换原来的findUsersByRole(String role)
这个函数的sql语句将是:
String sql="select * from user where role='"+role+"' limit "+from+", 20";当role="0",from=20的sql是这样的:
select*from user where role='0' limit 10,20