Java课程设计—实体类的数据库接口(2)
发布日期:2021-05-08 20:32:03 浏览次数:24 分类:原创文章

本文共 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(); 跟上面的是一样的,如果脑子灵活的话,可以想到上面涉及到的两个类也是为了给其他类直接调用的,因为只需要传对象过去就行。至于给谁调用,看下一篇就知道了。

上一篇:Linux的软链接跟Windows快捷方式一样?
下一篇:数据结构与算法总结 基础篇(一)

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年04月02日 23时14分57秒