JDBC基础知识及人事管理系统代码详解

  • Post author:
  • Post category:其他




简介

Java DataBase Connectivity Java数据库连接

我们学习的技术是JDBC 不是 MYSQLJDBC 也不是 ORACLE JDBC JDBC是一套标准,是Java与各大数据库厂商共同定制的一套接口. 这套接口由各大数据库厂商进行了实现.



使用步骤: (6步)

  1. 引入jar文件.
  2. 加载数据库驱动 (JavaSE项目中可以省略 , JavaWeb项目必须编写此步骤) Class.forName(“com.mysql.jdbc.Driver”);
  3. 通过驱动管理器, 获取JDBC连接对象.

    Connection conn = DriverManager.getConnection(“数据库连接地址”,“帐号”,“密码”);

    数据库连接地址格式: 主协议:子协议://ip地址:端口号/数据库名称

    mysql的连接地址:

    jdbc:mysql://localhost:3306/java35

    oracle的连接地址: jdbc:oracle:thin:@localhost:1521:ORCL
  4. 通过连接对象, 创建SQL执行对象 (SQL执行环境) Statement state = conn.createStatement();
  5. 通过SQL执行对象 ,执行SQL语句. state.execute(String sql语句);
  6. 释放资源

    state.close();

    conn.close();



工厂方法设计模式 ( 静态工厂方法模式)

工厂方法模式一种创建对象的模式. 工厂方法模式基于”输入”,应用在超类和多个子类之间的情况,这种模式将创建对象的责任转移到工厂类;

工厂设计模式的优点:

  1. 面向接口编程,体现了面向对象的思想
  2. 降低了耦合, 将创建对象的工作转移到了工厂类



DAO

***DAO(Data Access Object)***是一个数据访问接口,数据访问:顾名思义就是与数据库打交道。夹在业务 逻辑与数据库资源中间。

为了建立一个健壮的Java应用,应该将所有对数据源的访问操作抽象封装在一个公共API中。用程序设计的 语言来说,就是建立一个接口,接口中定义了此应用程序中将会用到的所有事务方法。在这个应用程序中, 当需要和数据源进行交互的时候则使用这个接口,并且编写一个单独的类来实现这个接口在逻辑上对应这个 特定的数据存储。

DAO模式是标准的JavaEE设计模式之一.开发人员使用这个模式把底层的数据访问操作和上层的商务逻辑分 开.一个典型的DAO实现有下列几个组件:

  1. 一个DAO工厂类;
  2. 一个DAO接口;
  3. 至少一个实现DAO接口的具体类;
  4. 数据传递对象(有些时候叫做Bean对象).



JDBC完成人事管理系统

完成人事管理系统,实现人事数据保存到数据库,能够实现人事数据的增、删、改、查

随着我国疫情的好转,目前大部分的企业已经实现全面复工,小明所在的公司最近正 在进行大量的招聘人员(由于疫情期间影响,目前该公司只有5名员工),该公司想在最 近开发一套简易的系统实现人事的管理;



User类

public class User {
    private int e_id ;
    private String e_name;
    private Double e_salary;
    private String e_hiredate ;
    private int manager_id;

    public User(int e_id, String e_name, double e_salary, String e_hiredate, int manager_id) {
        this.e_id = e_id;
        this.e_name = e_name;
        this.e_salary = e_salary;
        this.e_hiredate = e_hiredate;
        this.manager_id = manager_id;
    }public int getE_id() {
        return e_id;
    }

    public void setE_id(int e_id) {
        this.e_id = e_id;
    }

    public double getE_salary() {
        return e_salary;
    }

    public void setE_salary(double e_salary) {
        this.e_salary = e_salary;
    }

    public void setE_hiredate(String e_hiredate) {
        this.e_hiredate = e_hiredate;
    }

    public int getManager_id() {
        return manager_id;
    }

    public void setManager_id(int manager_id) {
        this.manager_id = manager_id;
    }
    public String getE_name() {
        return e_name;
    }

    public void setE_name(String e_name) {
        this.e_name = e_name;
    }
    public User(int e_id, String e_name) {
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        User user = (User) o;
        return e_id == user.e_id &&
                Double.compare(user.e_salary, e_salary) == 0 &&
                manager_id == user.manager_id &&
                Objects.equals(e_name, user.e_name) &&
                Objects.equals(e_hiredate, user.e_hiredate);
    }

    @Override
    public int hashCode() {
        return Objects.hash(e_id, e_name, e_salary, e_hiredate, manager_id);
    }

    @Override
    public String toString() {
        return "bean.User{" +
                "e_id=" + e_id +
                ", e_name='" + e_name + '\'' +
                ", e_salary=" + e_salary +
                ", e_hiredate=" + e_hiredate +
                ", manager_id=" + manager_id +
                '}';
    }
}





接口BaseUserDao

public interface BaseUserDao {
   
    boolean insert(String e_name, double e_salary,String e_hiredate, int manager_id)throws Exception;
    boolean remove(int e_id);
    boolean update(int e_id, double e_salary);
    List<User> findAll();
}



MySqlUserDao

public class MySqlUserDao implements BaseUserDao {
    static {
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    @Override
    public boolean insert(String e_name, double e_salary, String e_hiredate, int manager_id) throws Exception {
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/company?useUnicode=true&characterEncoding=utf-8", "root", "");
        Statement state = conn.createStatement();
        //更改语句
        String sql = "insert into employees(e_id,e_name,e_salary,e_hiredate,manager_id) values(null,'" + e_name + "','" + e_salary + "','" + e_hiredate + "','" + manager_id + "')";
        System.out.println(sql);
        //执行批处理
        int i = state.executeUpdate(sql);
        //清空批处理指令
        state.clearBatch();
        state.close();
        conn.close();
        if (i>=1) {
            return true;
        }
        return false;
    }

    @Override
    public boolean remove(int e_id){
        Connection conn = null;
        Statement state = null;
        try {
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/company?useUnicode=true&characterEncoding=utf-8", "root", "");
            state = conn.createStatement();
            //insert into xzk_user values('username','password')    :   字符串的定义格式  字符串的表现格式
            int row1 = state.executeUpdate("delete from employees where e_id =" + e_id);
            if (row1 >= 1) {
                return true;
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            try {
                state.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            try {
                conn.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return false;
    };
    @Override
    public boolean update(int e_id, double e_salary){
        Connection conn = null;
        Statement state = null;
        try {
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/company?useUnicode=true&characterEncoding=utf-8", "root", "");
            state = conn.createStatement();
            //insert into xzk_user values('username','password')    :   字符串的定义格式  字符串的表现格式
            //这块改动,动态更改薪资
            int row1 = state.executeUpdate("update employees set e_salary=" + e_salary + " where e_id =" + e_id);
            return row1>0;
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            try {
                state.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            try {
                conn.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return false;
    };
    @Override
    public List<User> findAll() {
        List<User> data = new ArrayList<>();
        Connection conn = null;
        Statement state = null;
        ResultSet rs = null;
        try {
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/company?useUnicode=true&characterEncoding=utf-8", "root", "");
            state = conn.createStatement();
            rs = state.executeQuery("select * from employees");
            while(rs.next()){
                int e_id = rs.getInt("e_id");
                String e_name = rs.getString("e_name");
                Double e_salary = rs.getDouble("e_salary");
                String e_hiredate = rs.getString("e_hiredate");
                int manager_id = rs.getInt("manager_id");
                data.add(new User(e_id,e_name,e_salary,e_hiredate,manager_id));
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            try {
                rs.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            try {
                state.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            try {
                conn.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return data;
    }
}




UserDaoFactory

public class UserDaoFactory {
    public static BaseUserDao get(){
        return new MySqlUserDao();
    }
}



Main

public class Main {
    static Scanner input = new Scanner(System.in);
    static BaseUserDao dao = UserDaoFactory.get();
    public static void main(String[] args) throws Exception {
        System.out.println("欢迎来到人事管理系统");
        System.out.println("请选择:");
        System.out.println("1.调整薪资\t\t2.离职员工\t\t3.查看所有用户\t\t4.新增员工");

        String menu = input.nextLine();
        switch (menu){
            case "1":
                sal();
                break;
            case "2":
                dim();
                break;
            case "3":
                showUsers();
                break;
            case "4":
                increased();
                break;
        }
    }

    private static void increased() throws Exception {
        System.out.println("请输入姓名:");
        String e_name = input.nextLine();
        System.out.println("请输入薪资:");
        Double e_salary = input.nextDouble();

        System.out.println("请输入领导编号:");
        int manager_id = input.nextInt();

        System.out.println("请输入来司日期:");
        String e_hiredate = input.next();
        System.out.println(e_hiredate);
        //格式进行转转换
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date parse =  sdf.parse(e_hiredate + " 11:11:11");

        System.out.println(parse);
        String format = sdf.format(parse);
        boolean flag = dao.insert(e_name,e_salary,format,manager_id);
        System.out.println(flag?"员工添加成功":"员工添加失败");
    }

    private static void showUsers() {
        List<User> data = dao.findAll();
        System.out.println("所有用户信息如下:");
        //获取到数据 遍历输出
        for (User datum : data) {
            System.out.println(datum.toString());
        }
    }

    private static void dim() {
        System.out.println("请输入账号:");
        //id是int的
        int e_id = input.nextInt();
        boolean flag = dao.remove(e_id);
        System.out.println(flag?"离职成功":"离职失败");
    }

    private static void sal() {
        System.out.println("请输入账号:");
        int e_id = input.nextInt();
        System.out.println("请输入要增加的薪酬:");
        double e_salary = input.nextDouble();
        boolean flag = dao.update(e_id,e_salary);
        System.out.println(flag?"恭喜你,加薪成功":"很遗憾,加薪失败");
    }
}



运行结果

欢迎来到人事管理系统
请选择:
1.调整薪资		2.离职员工		3.查看所有用户		4.新增员工



MYSQL创建表

这里先创建表,后写Java



版权声明:本文为sun_1238原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。