介绍

JDBC是Java DataBase Connectivity的缩写,它是Java程序访问数据库的标准接口。

Java DataBase Connectivity

JDBC 驱动由数据库厂商提供,只要实现了 JDBC 接口就行。

引入依赖

  1. <dependency>
  2. <groupId>mysql</groupId>
  3. <artifactId>mysql-connector-java</artifactId>
  4. <version>5.1.47</version>
  5. <scope>runtime</scope>
  6. </dependency>

一个 Demo

  1. static List<Student> queryStudents() throws SQLException {
  2. List<Student> students = new ArrayList<>();
  3. // 获取连接
  4. try (Connection conn = DriverManager.getConnection(jdbcUrl, jdbcUsername, jdbcPassword)) {
  5. try (PreparedStatement ps = conn.prepareStatement("SELECT * FROM students WHERE grade = ? AND score >= ?")) {
  6. ps.setInt(1, 3); // 第一个参数grade=?
  7. ps.setInt(2, 90); // 第二个参数score=?
  8. // 执行sql语句,并接收返回结果
  9. try (ResultSet rs = ps.executeQuery()) {
  10. // 处理结果
  11. while (rs.next()) {
  12. students.add(extractRow(rs));
  13. }
  14. }
  15. }
  16. }
  17. return students;
  18. }
  19. // 释放资源
  20. con.close();
  21. stat.close();
  22. rs.close();

现在这种方式比较少了,都是用 Mybatis

增删改查的 Demo

数据准备

  1. -- 创建db14数据库
  2. CREATE DATABASE db14;
  3. -- 使用db14数据库
  4. USE db14;
  5. -- 创建student
  6. CREATE TABLE student(
  7. sid INT PRIMARY KEY AUTO_INCREMENT, -- 学生id
  8. NAME VARCHAR(20), -- 学生姓名
  9. age INT, -- 学生年龄
  10. birthday DATE -- 学生生日
  11. );
  12. -- 添加数据
  13. INSERT INTO student VALUES (NULL,'张三',23,'1999-09-23'),(NULL,'李四',24,'1998-08-10'),(NULL,'王五',25,'1996-06-06'),(NULL,'赵六',26,'1994-10-20');

https://www.yuque.com/yuchenhuang/dgl7mw/5a97c02304c0ccb420de830f5d6f6d8e#693059d9

  • 持久层

    1. /*
    2. 查询所有学生信息
    3. */
    4. @Override
    5. public ArrayList<Student> findAll() {
    6. ArrayList<Student> list = new ArrayList<>();
    7. Connection con = null;
    8. Statement stat = null;
    9. ResultSet rs = null;
    10. try{
    11. //1.注册驱动
    12. Class.forName("com.mysql.jdbc.Driver");
    13. //2.获取数据库连接
    14. con = DriverManager.getConnection("jdbc:mysql://192.168.59.129:3306/db14", "root", "itheima");
    15. //3.获取执行者对象
    16. stat = con.createStatement();
    17. //4.执行sql语句,并且接收返回的结果集
    18. String sql = "SELECT * FROM student";
    19. // 使用prepareStatement解决SQL注入
    20. rs = stat.executeQuery(sql);
    21. //5.处理结果集
    22. while(rs.next()) {
    23. Integer sid = rs.getInt("sid");
    24. String name = rs.getString("name");
    25. Integer age = rs.getInt("age");
    26. Date birthday = rs.getDate("birthday");
    27. //封装Student对象
    28. Student stu = new Student(sid,name,age,birthday);
    29. //将student对象保存到集合中
    30. list.add(stu);
    31. }
    32. } catch(Exception e) {
    33. e.printStackTrace();
    34. } finally {
    35. //6.释放资源
    36. if(con != null) {
    37. try {
    38. con.close();
    39. } catch (SQLException e) {
    40. e.printStackTrace();
    41. }
    42. }
    43. if(stat != null) {
    44. try {
    45. stat.close();
    46. } catch (SQLException e) {
    47. e.printStackTrace();
    48. }
    49. }
    50. if(rs != null) {
    51. try {
    52. rs.close();
    53. } catch (SQLException e) {
    54. e.printStackTrace();
    55. }
    56. }
    57. }
    58. //将集合对象返回
    59. return list;
    60. }
  • 业务层

    1. /*
    2. 查询所有学生信息
    3. */
    4. @Override
    5. public ArrayList<Student> findAll() {
    6. // 调用持久层
    7. return dao.findAll();
    8. }
  • 控制层

    1. /*
    2. 查询所有学生信息
    3. */
    4. @Test
    5. public void findAll() {
    6. // 调用业务层
    7. ArrayList<Student> list = service.findAll();
    8. // 这句话什么意思
    9. for(Student stu : list) {
    10. System.out.println(stu);
    11. }
    12. }