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