
本文共 7815 字,大约阅读时间需要 26 分钟。
上一篇分析了数据库接口类,基本都是固定的操作,所以把它封装成一个类。这一次就用上了数据库接口类了,整个程序中需要用到数据库来保存的信息是学生信息和管理员(用户)的信息,所以我们要创建这两个实体类,然后创建这两个类对应的数据库接口类。一个一个来吧!
在了解实体类的数据库接口类之前先看一下实体类中都有些什么?这里就给出管理员实体类的代码,可以看出有成员变量、设置器和访问器,设置器和访问器是为了方便设置和读取对象成员变量的值。学生信息实体类也是一样的,这里就不放了。添加设置器和访问器的快捷键是Alt+Shift+s,按完之后会弹出一个框,再按一下s就可以了。
package hr.obj; public class admin_user { private String account; private String password; private String okpwd; public String getAccount() { return account; } public void setAccount(String account) { this.account = account; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public void setOkpwd(String okPwd) { this.okpwd = okPwd; } public String getOkpwd() { return okpwd; }}
一、管理员数据库接口类
package hr.dao;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import javax.swing.JOptionPane;import hr.obj.admin_user;public class UserDao {/** * 判断用户名和密码的方法 */ public static boolean userlogin(admin_user user) { Connection conn = null; try { String username = user.getAccount(); String pwd = user.getPassword(); conn = DAO.getConnection();// 获得数据库连接 PreparedStatement ps = conn.prepareStatement("select password from admin_users where account=?"); ps.setString(1, username); ResultSet rs = ps.executeQuery();// 执行SQL语句,获得查询结果集 if (rs.next() && rs.getRow() > 0) { // 通过用户名这一列,判断是否有用户名 String password = rs.getString("password"); if (password.equals(pwd)) {// 如果有用户名,判断密码是否一致 SaveUserTool.setUsername(username);// 记录当前登录的账号 SaveUserTool.setPassword(pwd);// 记录当前登录的密码 return true; // 密码正确返回true } else { JOptionPane.showMessageDialog(null, "密码不正确!"); return false; // 密码错误返回false } } else { JOptionPane.showMessageDialog(null, "用户不存在!"); return false; // 用户不存在返回false } } catch (SQLException e) { JOptionPane.showMessageDialog(null, "登录失败,数据库异常!\n" + e.getMessage()); return false; // 数据库异常返回false } finally { if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }/** * 添加用户信息的方法 */ public static void addUser(admin_user user) { Connection conn = null; try { String username = user.getAccount(); String pwd = user.getPassword(); String okpwd = user.getOkpwd(); if (username == null || username.trim().equals("") || pwd == null || pwd.trim().equals("") || okpwd == null || okpwd.trim().equals("")) { JOptionPane.showMessageDialog(null, "用户名或密码不能为空!"); return; } if (!pwd.trim().equals(okpwd.trim())) { JOptionPane.showMessageDialog(null, "两次输入的密码不一致。"); return; } conn = DAO.getConnection(); PreparedStatement ps = conn.prepareStatement("insert into admin_users (account,password)values(?,?)"); ps.setString(1, username.trim()); ps.setString(2, pwd.trim()); int effect_count = ps.executeUpdate(); if (effect_count > 0) { JOptionPane.showMessageDialog(null, "添加成功!"); } else { JOptionPane.showMessageDialog(null, "添加失败!"); } } catch (Exception e) { JOptionPane.showMessageDialog(null, "用户名已存在,请换一个名称!"); return; } finally { try { if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } }/** * 修改用户的密码 oldpwd:原密码 * * newpwd:新密码 * * okpwd:确认密码 */ public static void updateUser(String oldpwd, String newpwd, String okpwd) { try { if (!newpwd.trim().equals(okpwd.trim())) { JOptionPane.showMessageDialog(null, "两次输入的密码不一致!"); return; } if (!oldpwd.trim().equals(SaveUserTool.getPassword())) { JOptionPane.showMessageDialog(null, "原密码不正确!"); return; } Connection conn = DAO.getConnection(); PreparedStatement ps; ps = conn.prepareStatement("update admin_users set password=? where account=?"); ps.setString(1, newpwd.trim()); ps.setString(2, SaveUserTool.getUsername()); int effect_count = ps.executeUpdate(); if (effect_count > 0) { JOptionPane.showMessageDialog(null, "密码修改成功!"); } else { JOptionPane.showMessageDialog(null, "密码修改失败!"); } ps.close(); conn.close(); } catch (SQLException e) { JOptionPane.showMessageDialog(null, "数据库异常!" + e.getMessage()); return; } }}
这个类中有三个方法,分别用来校验登录的密码是否正确、添加新管理员、修改管理员的密码。其中校验登录和添加管理员的函数参数是一个管理员对象,这种做法就印证了java的面向对象的思想。具体怎么使用呢?下一篇会详细讲,这里就用添加管理员举一个小例子。
.
当用户输入新管理员信息的时候,先新建一个管理员实体类的对象,然后调用该对象的设置器为所有成员变量赋值,然后调用上面的方法addUser(admin_user user),把该对象传进去就行了,这就完成了添加用户的操作。
.
从上面的代码可以看到这句代码conn = DAO.getConnection(); 这一句就是调用了上一篇的数据库接口类中的连接数据库方法。需要连接数据库进行操作时,直接调用就行,这就是java编程的思想。
但是为什么修改管理员密码的时候就不用传对象作为参数呢?这里是有一个小技巧,留到下一篇分享哈!!
二、学生信息数据库类
因为学生信息也是一个实体类,也会涉及到增删改查等操作,所以用对象来操作也是必然的。因为代码量太大,这里就只列举添加学生信息的操作(增加一个新学生),其他的删除、修改’都是差不多的,只不过sql语句不一样而已。
public class StudentDAO {/** * 添加学生信息 */ public static void insert_studentInfo(stu_info stu) { if (SaveStudentTool.isFlag_insert()) { SaveStudentTool.setFlag_insert(false); }// 信息为空校验 if (stu.getId() == null || stu.getId().trim().equals("")) { JOptionPane.showMessageDialog(null, "学号必须填写!"); return; } if (stu.getName() == null || stu.getName().trim().equals("")) { JOptionPane.showMessageDialog(null, "姓名必须填写!"); return; } if (stu.getSex() == null || stu.getSex().trim().equals("")) { JOptionPane.showMessageDialog(null, "性别必须填写!"); return; } if (stu.getBirthday() == null || stu.getBirthday().trim().equals("")) { JOptionPane.showMessageDialog(null, "出生年月日必须填写!"); return; } if (stu.getEmail() == null || stu.getEmail().trim().equals("")) { JOptionPane.showMessageDialog(null, "邮件账号必须填写!"); return; } if (stu.getPhone() == null || stu.getPhone().trim().equals("")) { JOptionPane.showMessageDialog(null, "电话号码必须填写!"); return; } if (stu.getAddress() == null || stu.getAddress().trim().equals("")) { JOptionPane.showMessageDialog(null, "地址必须填写!"); return; } if (stu.getPosition() == null || stu.getPosition().trim().equals("")) { JOptionPane.showMessageDialog(null, "职位必须填写!"); return; } Connection conn = null;// 声明数据库连接对象// 声明PreparedStatement对象 PreparedStatement ps = null; try { conn = DAO.getConnection();// 获得数据库连接// 创建PreparedStatement对象,并传递SQL语句 ps = conn.prepareStatement("insert into IOT_18_3 (id,name,sex,position,address,birthday,phone,email)values(?,?,?,?,?,?,?,?)"); ps.setString(1, stu.getId());// 为sql中的参数赋值 ps.setString(2, stu.getName()); ps.setString(3, stu.getSex()); ps.setString(4, stu.getPosition()); ps.setString(5, stu.getAddress()); ps.setString(6, stu.getBirthday()); ps.setString(7, stu.getPhone()); ps.setString(8, stu.getEmail()); int effect_count = ps.executeUpdate();// 获取sql执行结果 if (effect_count > 0) {// 如果影响行数大于0,代表执行成功 JOptionPane.showMessageDialog(null, "添加学生信息成功!"); SaveStudentTool.setFlag_insert(true); } else { JOptionPane.showMessageDialog(null, "添加学生信息失败!"); } } catch (Exception e) { JOptionPane.showMessageDialog(null, "数据库异常,添加失败!"); e.printStackTrace(); } finally { try { if (ps != null) { ps.close(); } if (conn != null) { conn.close(); } } catch (Exception e2) { e2.printStackTrace(); } } }}
跟管理员的例子一样,把新学生的信息赋值给一个新的学生信息对象后,把这个对象传给insert_studentInfo(stu_info stu),就完成了添加学生信息的操作。同样这里也有这一句conn = DAO.getConnection(); 跟上面的是一样的,如果脑子灵活的话,可以想到上面涉及到的两个类也是为了给其他类直接调用的,因为只需要传对象过去就行。至于给谁调用,看下一篇就知道了。
发表评论
最新留言
关于作者
