JDBC案例

JDBC案例

使用JDBC完成对student表的CRUD操作

数据准备

数据库和数据表

-- 创建db23数据库
CREATE DATABASE db23;

-- 使用db14数据库
USE db23;

-- 创建student表
CREATE TABLE student(
	sid INT PRIMARY KEY AUTO_INCREMENT,	-- 学生id
	NAME VARCHAR(20),					-- 学生姓名
	age INT,							-- 学生年龄
	birthday DATE						-- 学生生日
);

-- 添加数据
INSERT INTO student VALUES (NULL,'张三',23,'1999-09-23'),(NULL,'李四',24,'1998-08-10'),(NULL,'王五',25,'1996-06-06'),(NULL,'赵六',26,'1994-10-20');

java实体类

- Student类,成员变量对应表中的列

- 注意:所有的基本数据类型需要使用包装类,以防null值无法赋值

package com.itss.jdbc.domain;


import java.util.Date;

public class Student {
    //成员变量如果是基本数据类型 为了防止有null值出现  基本数据类型要使用包装类
    private Integer sid;
    private String name;
    private Integer age;
    private Date birthday;

    public Student(Integer sid, String name, Integer age, Date birthday) {
        this.sid = sid;
        this.name = name;
        this.age = age;
        this.birthday = birthday;
    }

    public Student() {
    }

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

    public Integer getSid() {
        return sid;
    }

    public void setSid(Integer sid) {
        this.sid = sid;
    }

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

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

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
}

需求实现

  1. 需求一∶查询所有学生信息

编辑切换为居中

添加图片注释,不超过 140 字(可选)

2.需求二︰根据id查询学生信息

编辑切换为居中

添加图片注释,不超过 140 字(可选)

3.需求三∶新增学生信息

编辑切换为居中

添加图片注释,不超过 140 字(可选)

4.需求四:修改学生信息

编辑切换为居中

添加图片注释,不超过 140 字(可选)

5.需求五∶删除学生信息

编辑切换为居中

添加图片注释,不超过 140 字(可选)

代码:

mysql数据库准备数据

-- 创建db23数据库
CREATE DATABASE db23;

-- 使用db23数据库
USE db23;

-- 创建student表
CREATE TABLE student(
	sid INT PRIMARY KEY AUTO_INCREMENT,	-- 学生id
	NAME VARCHAR(20),					-- 学生姓名
	age INT,							-- 学生年龄
	birthday DATE						-- 学生生日
);

-- 添加数据
INSERT INTO student VALUES (NULL,'张三',23,'1999-09-23'),(NULL,'李四',24,'1998-08-10'),(NULL,'王五',25,'1996-06-06'),(NULL,'赵六',26,'1994-10-20');

StudentDao接口

package com.itss.jdbc.dao;

import com.itss.jdbc.domain.Student;

import java.util.ArrayList;

//Dao层
public interface StudentDao {
    //    查询所有学生信息
    public abstract ArrayList<Student> findAll();

    //条件查询,根据id获取学生信息
    public abstract Student finById(Integer id);

    //新增学生信息
    public abstract int insert(Student stu);

    //修改学生信息
    public abstract int update(Student stu);

    //删除学生信息
    public abstract int delete(Integer id);

}

StudentDao接口的实现类 用来编写具体对数据库的操作代码

package com.itss.jdbc.dao;


import com.itss.jdbc.domain.Student;

import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

//最底层动作实现方法
public class StudentDaoImpl implements StudentDao {
    //    实现查询所有学生信息接口
    @Override
    public ArrayList<Student> findAll() {
//            创建集合对象
        ArrayList<Student> list = new ArrayList<>();
        //为了能够释放资源将对象抽取出来  在后面直接发赋值即可
        Connection con = null;
        Statement stat = null;
        ResultSet rs = null;
        try {
            //1、注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2、获取数据库连接
//        参数:URL  数据库用户名  数据库密码
//        localhost表示本机IP  127.0.0.1  3306表示端口号  db23  数据库名
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/db23", "root", "123456");
//          3、获取执行者对象
            stat = con.createStatement();
//          4、执行sql语句并返回结果
            String sql = "SELECT * FROM Student";
//        返回结果集对象
            rs = stat.executeQuery(sql);
//          5、处理结果
//        只要rs.next() 结果为true 就说明还有数据
            while (rs.next()) {
                Integer sid = rs.getInt("sid");
                String name = rs.getString("name");
                Integer age = rs.getInt("age");
                Date birthday = rs.getDate("birthday");
//                封装Student对象
                Student stu = new Student(sid, name, age, birthday);
//                将Student对象保存到集合当中
                list.add(stu);
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //      7、释放资源
//            首先判断是否为null 是则释放资源 不是则不操作  否则会报异常
            if (con != null) {
                try {
                    con.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (stat != null) {
                try {
                    stat.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

        }
//        将集合对象返回
        return list;
    }

    //实现条件查询,根据id获取学生信息接口
    @Override
    public Student finById(Integer id) {
        //            只需要查询一条数据 创建一个Student对象即可
        Student stu = new Student();
        //为了能够释放资源将对象抽取出来  在后面直接发赋值即可
        Connection con = null;
        Statement stat = null;
        ResultSet rs = null;
        try {
            //1、注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2、获取数据库连接
//        参数:URL  数据库用户名  数据库密码
//        localhost表示本机IP  127.0.0.1  3306表示端口号  db23  数据库名
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/db23", "root", "123456");
//          3、获取执行者对象
            stat = con.createStatement();
//          4、执行sql语句并返回结果
            String sql = "SELECT * FROM Student WHERE sid='" + id + "' ";
//        返回结果集对象
            rs = stat.executeQuery(sql);
//          5、处理结果
//        只要rs.next() 结果为true 就说明还有数据
            while (rs.next()) {
                Integer sid = rs.getInt("sid");
                String name = rs.getString("name");
                Integer age = rs.getInt("age");
                Date birthday = rs.getDate("birthday");
//                封装Student对象
                stu.setSid(sid);
                stu.setName(name);
                stu.setAge(age);
                stu.setBirthday(birthday);
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //      7、释放资源
//            首先判断是否为null 是则释放资源 不是则不操作  否则会报异常
            if (con != null) {
                try {
                    con.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (stat != null) {
                try {
                    stat.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

        }
//        将对象返回
        return stu;
    }

    //实现新增学生信息接口
    @Override
    public int insert(Student stu) {
        //为了能够释放资源将对象抽取出来  在后面直接发赋值即可
        Connection con = null;
        Statement stat = null;
        int result = 0;
        try {
            //1、注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2、获取数据库连接
//        参数:URL  数据库用户名  数据库密码
//        localhost表示本机IP  127.0.0.1  3306表示端口号  db23  数据库名
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/db23", "root", "123456");
//          3、获取执行者对象
            stat = con.createStatement();
//          4、执行sql语句并返回结果
//            单独处理日期对象 获取的时间对象一开始的格式不是我们想要的 所以要格式化一下
            Date date = stu.getBirthday();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            String birthday = sdf.format(date);
            String sql = "INSERT INTO  Student VALUES ('" + stu.getSid() + "','" + stu.getName() + "','" + stu.getAge() + "','" + birthday + "')";
//        返回结果集对象
            result = stat.executeUpdate(sql); //返回影响的行数

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //      7、释放资源
//            首先判断是否为null 是则释放资源 不是则不操作  否则会报异常
            if (con != null) {
                try {
                    con.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (stat != null) {
                try {
                    stat.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

        }
//        将对象返回
        return result;
    }

    //实现修改学生信息接口
    @Override
    public int update(Student stu) {
        //为了能够释放资源将对象抽取出来  在后面直接发赋值即可
        Connection con = null;
        Statement stat = null;
        int result = 0;
        try {
            //1、注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2、获取数据库连接
//        参数:URL  数据库用户名  数据库密码
//        localhost表示本机IP  127.0.0.1  3306表示端口号  db23  数据库名
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/db23", "root", "123456");
//          3、获取执行者对象
            stat = con.createStatement();
//          4、执行sql语句并返回结果
//            单独处理日期对象 获取的时间对象一开始的格式不是我们想要的 所以要格式化一下
            Date date = stu.getBirthday();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            String birthday = sdf.format(date);
            String sql = "UPDATE Student SET sid='" + stu.getSid() + "',name='" + stu.getName() + "',age='" + stu.getAge() + "',birthday='" + birthday + "' WHERE sid='" + stu.getSid() + "'";
//        返回结果集对象
            result = stat.executeUpdate(sql); //返回影响的行数

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //      7、释放资源
//            首先判断是否为null 是则释放资源 不是则不操作  否则会报异常
            if (con != null) {
                try {
                    con.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (stat != null) {
                try {
                    stat.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

        }
//        将对象返回
        return result;
    }

    //实现删除学生信息接口
    @Override
    public int delete(Integer id) {
        //为了能够释放资源将对象抽取出来  在后面直接发赋值即可
        Connection con = null;
        Statement stat = null;
        int result = 0;
        try {
            //1、注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2、获取数据库连接
//        参数:URL  数据库用户名  数据库密码
//        localhost表示本机IP  127.0.0.1  3306表示端口号  db23  数据库名
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/db23", "root", "123456");
//          3、获取执行者对象
            stat = con.createStatement();
            String sql = "DELETE FROM Student WHERE sid='" + id + "'";
//        返回结果集对象
            result = stat.executeUpdate(sql); //返回影响的行数

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //      7、释放资源
//            首先判断是否为null 是则释放资源 不是则不操作  否则会报异常
            if (con != null) {
                try {
                    con.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (stat != null) {
                try {
                    stat.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

        }
//        将对象返回
        return result;
    }
}

StudentService接口

package com.itss.jdbc.service;

import com.itss.jdbc.domain.Student;

import java.util.ArrayList;

//Dao层
public interface StudentService {
    //    查询所有学生信息
    public abstract ArrayList<Student> findAll();

    //条件查询,根据id获取学生信息
    public abstract Student finById(Integer id);

    //新增学生信息
    public abstract int insert(Student stu);

    //修改学生信息
    public abstract int update(Student stu);

    //删除学生信息
    public abstract int delete(Integer id);

}

StudentService 接口的实现类 用来调用处理数据库并返回的结果

package com.itss.jdbc.service;


import com.itss.jdbc.dao.StudentDao;
import com.itss.jdbc.dao.StudentDaoImpl;
import com.itss.jdbc.domain.Student;

import java.util.ArrayList;
//调用底层动作方法
public class StudentServiceImpl implements StudentService {
    //    声明Dao层对象
    private StudentDao dao = new StudentDaoImpl();

    //    实现查询所有学生信息接口
    @Override
    public ArrayList<Student> findAll() {

        return dao.findAll();
    }

    //实现条件查询,根据id获取学生信息接口
    @Override
    public Student finById(Integer id) {

        return dao.finById(id);
    }

    //实现新增学生信息接口
    @Override
    public int insert(Student stu) {
        return dao.insert(stu);
    }

    //实现修改学生信息接口
    @Override
    public int update(Student stu) {
        return dao.update(stu);
    }

    //实现删除学生信息接口
    @Override
    public int delete(Integer id) {
        return dao.delete(id);
    }
}

StudentController类 相当于主函数 用来调用已经实现的类 并输出结果

package com.itss.jdbc.controller;


import com.itss.jdbc.domain.Student;
import com.itss.jdbc.service.StudentService;
import com.itss.jdbc.service.StudentServiceImpl;
import org.junit.Test;

import java.util.ArrayList;
import java.util.Date;

public class StudentController {
    //    声明StudentServiceImpl类
    private StudentService service = new StudentServiceImpl();

    //    查询所有学生信息
    @Test
    public void findAll() {
        ArrayList<Student> list = service.findAll();
        for (Student stu : list) {
            System.out.println(stu);
        }
    }

    ;

    @Test
    //条件查询,根据id获取学生信息
    public void finById() {
        Student stu = service.finById(3);
        System.out.println(stu);
    }

    ;

    @Test
    //新增学生信息
    public void insert() {
        Student stu = new Student(5, "小梁梁", 18, new Date());
        int result = service.insert(stu);//接收返回的影响行数  如果不为空说明添加成功

        if (result != 0) {
            System.out.println("他添加成功!");
        } else {
            System.out.println("添加失败!");
        }
    }

    ;

    @Test
    //修改学生信息
    public void update() {
//  首先查询要修改的信息并返回
        Student stu = service.finById(5);
//  再修改的信息
        stu.setName("小小梁");

//    最后调用修改信息的方法 将修改的数据进行赋值  同时接收影响行数  并判断是否修改成功
        int result = service.update(stu);
        if (result != 0) {
            System.out.println("update ok!");
        } else {
            System.out.println("update lose!");
        }
    }

    ;
@Test
    //删除学生信息
    public void delete() {
// 调用删除方法并接收返回的影响行数
        int result = service.delete(5);
        if (result != 0) {
            System.out.println("delete ok!");
        } else {
            System.out.println("delete lose!");
        }
    }

    ;
}
 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值