mvc_实现数据库增删改查

185 阅读5分钟

mvc_实现数据库增删改查

题目要求:

1、完成注册功能:通过控制台获取用户名、密码和确认密码,密码与确认密码相同才可以进行注册,注册成功或失败均给出相应的提示。
2、完成登录功能:通过控制台获取用户名和密码,完成登录功能,登录成功和失败均给出相应的提示。
3、向学生表中添加一条学生信息,信息由控制台获取,添加成功和失败均给出相应的提示
4、修改表中的学生信息,通过控制台获取用户输入学生的名字,判断该名字的记录是否存在,如果存在则将该学生的年龄修改为新年龄,新年龄的数据由控制台获取。修改成功或失败均给出相应的提示
5、删除学生表中的一条学生信息,通过控制台获取要删除的学生的姓名,判断该名字的记录是否存在,如果存在则删除。删除成功或失败均给出相应的提示。
6、查询所有的学生信息,并显示到控制台上
7、查询性别为男的学生信息。

1. 整体思路

首先建立几个package:

util包用来存储工具类;

dao包用来实现增改删查;

controller包;控制器+view

po包:对象包

service包:服务包

数据库-->dao-->service-->controler(这里的controller代替了view的功能)

2. 代码

po包内代码: Student类

public class Student {
    private int id;
    private String name;
    private int age;
    private String sex;
    private String tel;

    public Student() {
    }

    public Student(int id, String name, int age, String sex, String tel) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.tel = tel;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getTel() {
        return tel;
    }

    public void setTel(String tel) {
        this.tel = tel;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                ", tel='" + tel + '\'' +
                '}';
    }
}

util包内代码(工具类)(封装数据,提高运行效率):util类

public class ConnUtil {


        //    1.注册驱动
    //类一加载,就需要做一些动作,而且只执行一次,比如jdbc中驱动的加载。

    static{
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            System.out.println("驱动注册失败");
        }
    }

        // 2.连接数据库并返回连接对象
    public static Connection getConnection() throws SQLException {  //优化代码
        String url="jdbc:mysql://localhost:3306/mydb";
        String username="root";
        String pwd="js199803";
       Connection conn =DriverManager.getConnection(url,username,pwd);
        return conn;

    }
    //3.关闭资源
    public static void close(ResultSet rs,PreparedStatement ps,Connection conn){  //优化代码
        try {
            if (rs!=null){
                rs.close();
            }
            if (ps!=null){
                ps.close();
            }
            if (conn!=null){
                conn.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    
//    2.连接数据库
//    3.关闭资源

}public class ConnUtil {


        //    1.注册驱动
    //类一加载,就需要做一些动作,而且只执行一次,比如jdbc中驱动的加载。

    static{
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            System.out.println("驱动注册失败");
        }
    }

        // 2.连接数据库并返回连接对象
    public static Connection getConnection() throws SQLException {  //优化代码
        String url="jdbc:mysql://localhost:3306/mydb";
        String username="root";
        String pwd="js199803";
       Connection conn =DriverManager.getConnection(url,username,pwd);
        return conn;

    }
    //3.关闭资源
    public static void close(ResultSet rs,PreparedStatement ps,Connection conn){  //优化代码
        try {
            if (rs!=null){
                rs.close();
            }
            if (ps!=null){
                ps.close();
            }
            if (conn!=null){
                conn.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    
//    2.连接数据库
//    3.关闭资源

}

dao包内代码(增删改查业务代码):StuDao类

public class StuDao {
    Connection conn = null;
    ResultSet rs=null;
    PreparedStatement ps=null;
//    1.增加数据
    public boolean addStu(Student s){
        ConnUtil cu = new ConnUtil();
        try {
            conn = cu.getConnection();
            String sql="insert into student values(default,?,?,?,?)";
            ps=conn.prepareStatement(sql);
            ps.setString(1,s.getName());
            ps.setInt(2,s.getAge());
            ps.setString(3,s.getSex());
            ps.setString(4,s.getTel());
            //执行sql
            int count = ps.executeUpdate();
            if(count>0){
                return true;
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            cu.close(rs,ps,conn);
        }



        return false;
    }

//    2.修改数据
    public boolean updateStu(String name,int age){
        ConnUtil cu=new ConnUtil();
        try {

            conn = cu.getConnection();
            String sql="update student set stuAge="+age+" where stuName like '%"+name+"%'";
            ps=conn.prepareStatement(sql);
            int count=ps.executeUpdate();
            if (count>0){
                return true;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {

        }
        return false;

    }
//    3.删除数据
    public boolean delStu(int id){//按照id号删除数据
        ConnUtil cu = new ConnUtil();
        try {
            conn = cu.getConnection();
            String sql="delete from student where stuID=?";
            ps=conn.prepareStatement(sql);
            ps.setInt(1,id);
            int i = ps.executeUpdate();
            if (i>0){
                return true;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            cu.close(rs,ps,conn);
        }


        return false;
    }
//    4.查找数据
    public ArrayList<Student> findStu(String name){
        ConnUtil cu = new ConnUtil();
        ArrayList<Student> stuList = null;
        try {
            conn = cu.getConnection();
            String sql="select * from student where stuName like '%"+name+"%'";
            ps=conn.prepareStatement(sql);

             rs = ps.executeQuery();

           stuList=new ArrayList<Student>();
            while(rs.next()){
               //将查到的数据封装
               Student s = new Student();
               s.setId(rs.getInt("stuID"));
               s.setName(rs.getString("stuName"));
               s.setAge(rs.getInt("stuAge"));
               s.setSex(rs.getString("stuSex"));
               s.setTel(rs.getString("stuTel"));
               stuList.add(s);


           }


        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            cu.close(rs,ps,conn);
        }


        return stuList;
    }

    //check方法
    public boolean check(String name) {
        ConnUtil cu=new ConnUtil();
        try {
            conn=cu.getConnection();
            String sql="select * from student where stuName like '%"+name+"%'";
            ps=conn.prepareStatement(sql);
            rs=ps.executeQuery();
            if (rs.next()){
                return true;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            cu.close(rs,ps,conn);
        }


        return false;

    }
}

service包内代码: stuService类 调用StuDao()方法

public class StuService {
private StuDao stuDao=new StuDao();
//    1.增加方法
    public boolean addStu(Student s){
        return stuDao.addStu(s);
    }

    //check 方法
//    public boolean check(String name){
//        return StuDao.check(name);
//    }

//    2.修改方法
    public boolean updateStu(String name,int age){
//        1.查询用户
        boolean b=stuDao.check(name);

//            2.修改用户
        if (b){
            return stuDao.updateStu(name,age);
        }
        return false;
    }
//    3.删除方法
    public boolean delStu(int id){
        return stuDao.delStu(id);
    }
//    4.查询方法
    public ArrayList<Student> findStuByName(String name){

        return  stuDao.findStu(name);
    }
// 	  5.检查方法
    public boolean check(String name){
        return  stuDao.check(name);
    }


}

controller包内代码(这里的功能和view相同),用户界面,StuController类

public class StuController {
    public static void main(String[] args) {
        StuService ss = new StuService();
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("请选择操作类型:1.添加 2.修改 3.删除 4.查询 5.退出系统");
            int flag = sc.nextInt();
            if (flag == 1) {  //添加数据
                //模拟view层
                System.out.println("请输入姓名");
                String name = sc.next();
                System.out.println("请输入年龄");
                int age = sc.nextInt();
                System.out.println("请输入性别");
                String sex = sc.next();
                System.out.println("请输入电话号码");
                String tel = sc.next();
                //模拟controller层
                //1.数据封装
                Student s = new Student();
                s.setName(name);
                s.setAge(age);
                s.setSex(sex);
                s.setTel(tel);
                //2.调用stuService
                boolean addStu = ss.addStu(s);
                //3.根据Service的返回结果,分发到view视图
                if (addStu) {
                    System.out.println("添加成功");
                } else {
                    System.out.println("添加失败");
                }

            } else if (flag == 2) { //2.修改数据
                System.out.println("请输入您要修改的学生的学生姓名");
                String name = sc.next();
                System.out.println("请输入要修改的学生年龄");
                int age = sc.nextInt();
    //            2.1 数据封装
    //                2.2调用 Service
                boolean b = ss.updateStu(name, age);
                if (b) {
                    System.out.println("修改成功");
                } else {
                    System.out.println("修改失败");
                }

            } else if (flag == 3) { //3.删除数据
                System.out.println("请输入你要删除的id编号");
                int id = sc.nextInt();
    //            3.1.封装,只有一个数据不用封装
    //                    3.2.调用StuService
                boolean b = ss.delStu(id);
    //            3.3.模拟view界面结果
                if (b) {
                    System.out.println("删除成功");
                } else {
                    System.out.println("删除失败");
                }


            } else if (flag == 4) { //4.查询数据
                System.out.println("请输入要查找的用户名");
                String name = sc.next();
                //4.1封装,只有一个,无需封装
                //4.2 调用StuService

                ArrayList<Student> stuList = ss.findStuByName(name);
                boolean b = ss.check(name);
                if (b) {
                    for (Student s : stuList) {

                        System.out.println(s);
                    }
                } else {
                    System.out.println("查无此人");
                }
            }
            else if(flag==5){
                System.exit(5);
            } else{
                System.out.println("请重新输入数字");
            }
        }
    }
}

3. 注意事项

增删改用int i= ps.executeupdate();

查询用 rs=ps.executequery();