5.1.4 数据库操作类
接下来,我们要创建一个类专门用来执行SQL语句,这里我们命名为类是UserData(意为User数据相关)。
这个类暂时有两个函数,一个函数为userValidate,此函数功能是验证是否能登录,参数是用户名和密码,如果和数据库的匹配,那么可以登录返回true,否则返回false
一个函数是根据角色查询用户findUsersByRole,参数是角色(0是学生、1是老师,9是管理员)。查询结果是一个List。这个类用到了User类。
package data;import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.ArrayList;import java.util.List;public class UserData{ /** 根据用户名和密码验证是否能登录 */ public static boolean userValidate(String userName,String psw){ String pswFromDB=""; //要执行的sql语句,通过字符串拼接出来 String SQLTEXT="select password from user where userName = '"+userName+"'"; try{ //使用上面的DBConifg类的getCon方法,建立一个连接 Connection con=DBConfig.getCon(); //准备执行sql的实体 Statement stmt=con.createStatement(); //执行sql,并把查询结果赋给rst ResultSet rst=stmt.executeQuery(SQLTEXT); while(rst.next()){ //查询结果,在这里是查询字段为password的值 pswFromDB=rst.getString("password"); } //安装后使用先关闭原则,关闭各个对象,特别是con如果不关闭,会造成连接泄露 rst.close(); stmt.close(); con.close(); } catch(SQLException e){ e.printStackTrace(); } if(pswFromDB.equals(psw)){ //比较数据库查到的密码和参数传进来的密码是否相等 return true; } return false; } /** 根据角色查找用户 */ public static List<User> findUsersByRole(String role){ List<User> result=new ArrayList<User> (); //要执行的sql语句,通过字符串拼接出来 String SQLTEXT="select * from user where role='"+role+"' limit 10;"; try{ //使用上面的DBConifg类的getCon方法,建立一个连接 Connection con=DBConfig.getCon(); //准备执行sql的实体 Statement stmt=con.createStatement(); //执行sql,并把查询结果赋给rst ResultSet rst=stmt.executeQuery(SQLTEXT); while(rst.next()){ //查询结果,在这里是查询字段为password的值 String username=rst.getString("username"); String password=rst.getString("password"); String role1=rst.getString("role"); String nickname=rst.getString("nickname"); String createDate=rst.getString("create_date"); User user=new User(); user.setUsername(username); user.setPassword(password); user.setNickname(nickname); user.setCreateDate(createDate); user.setRole(role1); result.add(user); } //安装后使用先关闭原则,关闭各个对象,特别是con如果不关闭,会造成连接泄露 rst.close(); stmt.close(); con.close(); } catch(SQLException e){ e.printStackTrace(); } return result; }}这个类同样复制到data包里,和User以及DBConfig放在一起: