JDBC(四):简易部门管理系统的实现

做一个简单的部门管理系统
基本功能就是对数据库里的部门表进行增删查改

package Dept_Management;

import java.sql.*;
import java.util.Scanner;

public class TestMain {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int flag = 0;
        int deptno;
        String dname;
        String loc;
        String sql = "select count(*) from emp where ename=? and empno=?";
        String sql1 = "insert into dept(deptno,dname,loc)values(?,?,?)";
        String sql2 = "select * from dept";
        String sql3 = "delete from dept where deptno=?";
        String sql4 = "update dept set dname=?,loc=? where deptno=?";

        PreparedStatement preparedstatement = null;
        ResultSet rs = null;
        Connection connection = null;
        Driver driver = null;

        try {
            driver = new com.mysql.cj.jdbc.Driver();
            DriverManager.registerDriver(driver);
            //2.获取连接
            String url = "jdbc:mysql://localhost:3306/mysql";
            String user = "root";
            String password = "333";
            connection = DriverManager.getConnection(url, user, password);
            System.out.println("********请输入用户名**********");
            String Username = s.next();
            System.out.println("********请输入密码************");
            String pwd = s.next();
            preparedstatement = connection.prepareStatement(sql);
            preparedstatement.setString(1, Username);
            preparedstatement.setInt(2, Integer.valueOf(pwd));
            rs = preparedstatement.executeQuery();
            while (rs.next()) {
                flag = rs.getInt("count(*)");
            }
            if (rs != null) {
                rs.close();
            }
            if (preparedstatement != null) {
                preparedstatement.close();
            }
            if (flag != 1) {
                System.out.println("登录信息不存在,请重新登录");
                return;
            }

            while (true) {
                System.out.println("欢迎使用部门管理系统");
                System.out.println("****1.添加部门****");
                System.out.println("****2.查询部门****");
                System.out.println("****3.删除部门****");
                System.out.println("****4.更新部门****");
                System.out.println("****请输入操作****");
                flag = s.nextInt();
                if (flag == 1) {
                    System.out.println("请输入添加新部门的编号");
                    deptno = s.nextInt();
                    System.out.println("请输入添加新部门的名称");
                    dname = s.next();
                    System.out.println("请输入添加新部门的位置");
                    loc = s.next();
                    preparedstatement = connection.prepareStatement(sql1);
                    preparedstatement.setInt(1, deptno);
                    preparedstatement.setString(2, dname);
                    preparedstatement.setString(3, loc);
                    flag = preparedstatement.executeUpdate();
                    //connection的销毁放在最后
                    if (preparedstatement != null) {
                        preparedstatement.close();
                    }
                    if (flag == 1) {
                        System.out.println("部门添加成功");
                    } else {
                        System.out.println("部门添加失败");
                    }
                } else if (flag == 2) {
                    preparedstatement = connection.prepareStatement(sql2);
                    rs = preparedstatement.executeQuery();
                    //处理查询的结果集
                    //rs一次取一行,判断下一行是否有数据
                    System.out.println("deptno,dname,loc");
                    while (rs.next()) {
                        deptno = rs.getInt(1);
                        dname = rs.getString(2);
                        loc = rs.getString(3);
                        //或者直接写成字段名,查询结果后的字段名,如果as重命名后,用重命名的
                        //除了String类型,还有其他类型
                        System.out.println(deptno + "," + dname + "," + loc);
                    }
                    if (rs != null) {
                        rs.close();
                    }
                    if (preparedstatement != null) {
                        preparedstatement.close();
                    }
                } else if (flag == 3) {

                    preparedstatement = connection.prepareStatement(sql3);
                    System.out.println("请输入要删除的部门编号:");
                    int x = s.nextInt();
                    preparedstatement.setInt(1, x);
                    int count = preparedstatement.executeUpdate();
                    if (count == 1) {
                        System.out.println("删除成功");
                    } else {
                        System.out.println("删除失败");
                    }
                    if (preparedstatement != null) {
                        preparedstatement.close();
                    }
                } else if (flag == 4) {

                    System.out.println("请输入更新的部门编号");
                    deptno = s.nextInt();
                    System.out.println("请输入更新的部门名称");
                    dname = s.next();
                    System.out.println("请输入更新的部门位置");
                    loc = s.next();
                    preparedstatement = connection.prepareStatement(sql4);
                    preparedstatement.setString(1, dname);
                    preparedstatement.setString(2, loc);
                    preparedstatement.setInt(3, deptno);
                    flag = preparedstatement.executeUpdate();
                    if (flag == 1) {
                        System.out.println("部门信息更新成功");
                    } else {
                        System.out.println("部门信息更新失败");
                    }
                    if (preparedstatement != null) {
                        preparedstatement.close();
                    }
                }
                System.out.println("输入任意数字继续使用系统,输入0退出系统");
                flag = s.nextInt();
                if (flag == 0) {
                    try {
                        if (connection != null) {
                            connection.close();
                        }
                        System.out.println("系统正在退出,谢谢使用!");
                        break;
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }

        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            try {
                if (preparedstatement != null) {
                    preparedstatement.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

观察代码可知,很多地方可以复用,有必要单独写成一个子方法,需要的时候再调用

首先从简单的包装起来,初始化界面
直接写个初始化方法即可

package Dept_Management;

public class UI_Start {
    public void Initiate_Menu() {
        System.out.println("欢迎使用部门管理系统");
        System.out.println("****1.添加部门****");
        System.out.println("****2.查询部门****");
        System.out.println("****3.删除部门****");
        System.out.println("****4.更新部门****");
        System.out.println("****请输入操作****");
    }
}

还需要写一个JDBC的工具类
将能够封装起来的都封装了,主程序中就可以省些代码了

package Dept_Management;

import java.sql.*;

public class JDBCUtil {
    private Connection con = null;
    private PreparedStatement ps = null;

    //注册Driver,在第一次调用工具类时就加载
    static {
        Driver driver = null;
        try {
            driver = new com.mysql.cj.jdbc.Driver();
            DriverManager.registerDriver(driver);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }

    //创建connection
    public Connection createCon() {
        String url = "jdbc:mysql://localhost:3306/mysql";
        String user = "root";
        String password = "333";
        try {
            con = DriverManager.getConnection(url, user, password);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return con;
    }


    //封装PreparedStatement对象
    public PreparedStatement createPs(String sql) {
        try {
            Connection con = createCon();
            ps = con.prepareStatement(sql);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return ps;
    }

//写一个关闭方法
    public void close() {

        if (ps != null) {
            try {
                ps.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }
//重载关闭方法
    public void close(Connection con) {

        close();

        if (con != null) {
            try {
                con.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }
//重载关闭方法
    public void close(ResultSet rs) {

        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        close();
    }
}

但主程序还是要写很多,主要用来定义各种变量

package Dept_Management;

import java.sql.*;
import java.util.List;
import java.util.Scanner;

public class MainTest {
    public static void main(String[] args) throws SQLException {
    //声明一个工具对象
        JDBCUtil jdbcUtil = new JDBCUtil();
        //初始化界面
        UI_Start ui_start = new UI_Start();
        //声明一个DAO对象
        DeptDAO deptDAO = new DeptDAO();
        ResultSet rs = null;
        Connection con = null;
        PreparedStatement ps = null;
        //定义初试变量
        String deptno;
        String dname;
        String loc;
        int flag = 0;
        String sql = "select count(*) from emp where ename=? and empno=?";
        try {
            Scanner s = new Scanner(System.in);
            System.out.println("********请输入用户名**********");
            String Username = s.next();
            System.out.println("********请输入密码************");
            String pwd = s.next();
			//利用工具类来建立ps对象
            ps = jdbcUtil.createPs(sql);
            con = jdbcUtil.createCon();
            ps.setString(1, Username);
            ps.setInt(2, Integer.valueOf(pwd));
            rs = ps.executeQuery();
            while (rs.next()) {
            //判断是否存在该用户
                flag = rs.getInt("count(*)");
            }
            jdbcUtil.close(rs);

            if (flag != 1) {
                System.out.println("登录信息不存在,请重新登录");
                return;
            }

            while (true) {
                ui_start.Initiate_Menu();

                flag = s.nextInt();
                if (flag == 1) {
                    System.out.println("请输入添加新部门的编号");
                    deptno = s.next();
                    System.out.println("请输入添加新部门的名称");
                    dname = s.next();
                    System.out.println("请输入添加新部门的位置");
                    loc = s.next();
				//调用add方法
                    flag = deptDAO.add(deptno, dname, loc);

                    if (flag == 1) {
                        System.out.println("部门添加成功");
                    } else {
                        System.out.println("部门添加失败");
                    }
                    
                    //执行查询语句
                } else if (flag == 2) {
                //这里使用一个Dept类的泛型,用来接受查询结果,因为查询结果是一个集合
                    List<Dept> deptList = deptDAO.query();
                    System.out.println("deptno,dname,loc");
                    for (Dept dept : deptList
                    ) {
                        System.out.println("deptno:" + dept.getDeptno() + "   dname:" + dept.getDname() + "  loc:" + dept.getLoc());
                    }
                    jdbcUtil.close(rs);
                    //执行删除操作
                } else if (flag == 3) {

                    System.out.println("请输入要删除的部门编号:");
                    String deptNo = s.next();
                    //调用删除方法
                    int count = deptDAO.delete(deptNo);
                    if (count == 1) {
                        System.out.println("删除成功");
                    } else {
                        System.out.println("删除失败");
                    }
                    jdbcUtil.close();
                } else if (flag == 4) {

                    System.out.println("请输入更新的部门编号");
                    deptno = s.next();
                    System.out.println("请输入更新的部门名称");
                    dname = s.next();
                    System.out.println("请输入更新的部门位置");
                    loc = s.next();
					//调用更新方法
                    flag = deptDAO.update(deptno, dname, loc);
                    if (flag == 1) {
                        System.out.println("部门信息更新成功");
                    } else {
                        System.out.println("部门信息更新失败");
                    }
                    jdbcUtil.close();
                } else {
                    System.out.println("输入的数字不合法");
                }
                System.out.println("输入任意数字继续使用系统,输入0退出系统");
                flag = s.nextInt();
                if (flag == 0) {
                    try {
                        if (con != null) {
                            con.close();
                        }
                        System.out.println("系统正在退出,谢谢使用!");
                        break;
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }
        } catch (
                SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            jdbcUtil.close(con);
        }
    }
}

进一步看这些具体的方法

package Dept_Management;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class DeptDAO {
    private JDBCUtil jdbcUtil = new JDBCUtil();

//定义add方法
    public int add(String deptNo, String dname, String loc) {
        String sql1 = "insert into dept(deptno,dname,loc)values(?,?,?)";

        PreparedStatement ps = jdbcUtil.createPs(sql1);
        int result = 0;
        try {
            ps.setInt(1, Integer.valueOf(deptNo));
            ps.setString(2, dname);
            ps.setString(3, loc);
            result = ps.executeUpdate();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            jdbcUtil.close();
        }
        return result;
    }

//定义一个查询方法
    public List query() {
        String sql2 = "select * from dept";
        PreparedStatement ps = jdbcUtil.createPs(sql2);
        ResultSet rs = null;
        //返回的结果集是一个集合
        List list = new ArrayList();
        try {
            rs = ps.executeQuery();
            while (rs.next()) {
                int deptno = rs.getInt("deptno");
                String dname = rs.getString("dname");
                String loc = rs.getString("loc");
                //定义了一个dept类用来装返回结果
                Dept dept = new Dept(deptno, dname, loc);
                //每得到一条查询结果就添加进list里面
                list.add(dept);
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            jdbcUtil.close();
        }
        return list;
    }

//删除操作
    public int delete(String deptno) {
        String sql3 = "delete from dept where deptno=?";

        PreparedStatement ps = jdbcUtil.createPs(sql3);
        int result = 0;
        try {
            ps.setInt(1, Integer.valueOf(deptno));
            result = ps.executeUpdate();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            jdbcUtil.close();
        }
        return result;
    }
//更新操作
    public int update(String deptno, String dname, String loc) {
        String sql4 = "update dept set dname=?,loc=? where deptno=?";

        PreparedStatement ps = jdbcUtil.createPs(sql4);
        int result = 0;
        try {
            ps.setString(1, dname);
            ps.setString(2, loc);
            ps.setInt(3, Integer.valueOf(deptno));
            result = ps.executeUpdate();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            jdbcUtil.close();
        }
        return result;
    }
}

声明dept类

package Dept_Management;

public class Dept {
    Integer deptno;
    String dname;
    String loc;

    public Dept(Integer deptno, String dname, String loc) {
        this.deptno = deptno;
        this.dname = dname;
        this.loc = loc;
    }

    public Dept() {
    }

    public int getDeptno() {
        return deptno;
    }

    public void setDeptno(int deptno) {
        this.deptno = deptno;
    }

    public String getDname() {
        return dname;
    }

    public void setDname(String dname) {
        this.dname = dname;
    }

    public String getLoc() {
        return loc;
    }

    public void setLoc(String loc) {
        this.loc = loc;
    }
}

运行效果还是正常的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值