Java课程设计—实体类的数据库接口(2)

 

 

    上一篇分析了数据库接口类,基本都是固定的操作,所以把它封装成一个类。这一次就用上了数据库接口类了,整个程序中需要用到数据库来保存的信息是学生信息和管理员(用户)的信息,所以我们要创建这两个实体类,然后创建这两个类对应的数据库接口类。一个一个来吧!

    在了解实体类的数据库接口类之前先看一下实体类中都有些什么?这里就给出管理员实体类的代码,可以看出有成员变量、设置器和访问器,设置器和访问器是为了方便设置和读取对象成员变量的值。学生信息实体类也是一样的,这里就不放了。添加设置器和访问器的快捷键是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(); 跟上面的是一样的,如果脑子灵活的话,可以想到上面涉及到的两个类也是为了给其他类直接调用的,因为只需要传对象过去就行。至于给谁调用,看下一篇就知道了。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值