JDBC学习笔记【IDEA工具】


JDBC是什么?

JDBC(Java DataBase Connectivity) 称为Java数据库连接,它是一种用于数据库访问的应用程序API,由一组用Java语言编写的类和接口组成,有了JDBC就可以用统一的语法对多种关系数据库进行访问,而不用担心其数据库操作语言的差异。

开发第一个JDBC程序的单表CRUD

CRUD是指在做计算处理时的增加(Create)、重新取得数据(Retrieve)、更新(Update)和删除(Delete)几个单词的首字母简写。主要被用在描述软件系统中数据库或者持久层的基本操作功能。

1.准备环境

本段程序使用IDEA工具,连接MySQL数据库,使用Maven项目结构【点我学习Maven的下载与配置

MySQL版本:5.5

数据库驱动Jar包版本:mysql-connector-java-5.1.17

  • 创建一个数据库
drop database if exists `jdbctest`;
create database `jdbctest` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
  • 创建一个数据库表
CREATE TABLE IF NOT EXISTS `user`(
   `user_id` INT UNSIGNED AUTO_INCREMENT,
   `username` VARCHAR(255) NOT NULL,
   `password` VARCHAR(255) NOT NULL,
   PRIMARY KEY ( `user_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
  • 插入一些数据
insert into user(username,password) values ('admin','123456');
insert into user(username,password) values ('weiney','111111');

2.在pom.xml文件中导入数据库连接依赖

<dependencies>
    <!--数据库连接jar包-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.17</version>
    </dependency>
</dependencies>

3.编写jdbc.properties配置文件

jdbc.properties配置文件:

  • 包含数据库驱动Driver、数据库连接地址Url、数据库用户名User和数据库密码password
  • 采用配置文件的方式是为了使代码有更好的健壮性,并且满足OCP原则【对扩展开放,对修改关闭】
  • 该文件放到Resources目录下
  • 关于driver
  • 如果jdbc的jar包是5及5之前的数据库连接驱动名称:com.mysql.jdbc.Driver
  • jdbc的jar包是6及6之后的数据库连接驱动名称:com.mysql.cj.jdbc.Driver
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:【端口号】/【数据库名称】
username=【用户名】
password=【密码】

4.编写JDBC工具类

在java目录下新建一个包:pers.weiney.utils

新建工具类:JdbcUtils.java

package pers.weiney.utils;

import java.sql.*;
import java.util.ResourceBundle;

/**
 * @author Weiney
 * @ToDo    简单的JDBC工具类
 * @create 2022-11-21 16:06
 */
public class JdbcUtils {
    // 属性资源文件绑定
    private static ResourceBundle bundle = ResourceBundle.getBundle("jdbc");//此处直接写配置文件的名称即可
    // 根据属性配置文件key获取value
    private static String driver = bundle.getString("driver");
    private static String url = bundle.getString("url");
    private static String username = bundle.getString("username");
    private static String password = bundle.getString("password");

    static {
        // 注册驱动(注册驱动只需要注册一次,放在静态代码块当中。JdbcUtils类加载的时候执行。)
        try {
            Class.forName(driver);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 获取数据库连接对象
     * @return  数据库连接对象
     * @throws SQLException
     */
    public static Connection getConnection() throws SQLException {
        // 获取连接
        Connection conn = DriverManager.getConnection(url, username, password);
        return conn;
    }

    /**
     * 释放资源
     * @param conn 连接对象
     * @param ps 操作对象
     * @param rs 结果集
     * @throws SQLException
     */
    public static void close(Connection conn, Statement ps, ResultSet rs) {
        if(rs != null){
            try {
                rs.close();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }
        if (ps != null) {
            try {
                ps.close();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }
    }
}

5.编写测试类

在java目录下新建一个包:pers.weiney.dao.impl

新建简单测试类:JDBCTest.java

实现增删改查的具体6步骤:

  1. 获取数据库连接
  2. 定义SQL语句
  3. 获取预编译的数据库操作对象
  4. 执行SQL语句
  • 对于从数据库获取数据【查】:
    5. 执行SQL语句后会返回一个【结果集】,因此遍历结果集并输出
  • 对于修改数据库的数据【增、删、改】
    5. 绑定参数【对于SQL语句中的参数】
    6. 返回一个记录更改条数结果【1成功,0失败】
package pers.weiney.dao.impl;

import pers.weiney.utils.JdbcUtils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * @author Weiney
 * @ToDo 测试数据库连接
 * @create 2022-11-21 16:32
 */
public class JDBCTest {
    static Connection conn = null;
    static PreparedStatement ps = null;
    static ResultSet rs = null;

    public static void selectUser() {
        try {
            // 1.获取连接
            conn = JdbcUtils.getConnection();
            // 定义SQL语句
            String sql = "select username,password from user";
            // 2.获取预编译的数据库连接对象
            ps = conn.prepareStatement(sql);
            // 3.执行SQL语句:此处为查找语句,会返回结果集
            rs = ps.executeQuery();
            // 4.有结果集则遍历
            while (rs.next()) {
                String username = rs.getString("username");
                String password = rs.getString("password");
                System.out.println("Username = " + username + " Password = " + password);
            }

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

    public static void updateUser() {
        // 更新操作返回结果
        int count = 0;
        try {
            conn = JdbcUtils.getConnection();
            // 增、删、改除了sql语句不同,其他都一样,都不会返回结果集
            String sql = "insert into user(username,password) values(?,?)";
            ps = conn.prepareStatement(sql);
            // 增删改操作需要绑定数据
            ps.setString(1, "TestAdd");
            ps.setString(2, "111111");
            count = ps.executeUpdate();

        } catch (SQLException e) {
            throw new RuntimeException(e);
        } finally {
            JdbcUtils.close(conn, ps, null);
        }
        if (count == 1) {
            System.out.println("更新了【" + count + "】条数据");
        }
    }

    public static void main(String[] args) throws SQLException {
        // 查
        selectUser();
        // 更新操作(增、删、改)
        updateUser();
    }
}

关于JDBC技术的个人看法

在我看来,这项技术也是比较繁琐的,给SQL语句绑定参数,获取参数的值等,有大量重复的语句,并且在实际开发中,如果数据库的表结构发生改变,则需要修改Java代码。

SSM三大框架中的MyBatis则对数据库的操作进行了更好的封装,关于MyBatis在我的另一个博客MyBatis学习笔记中有介绍。

关于本文是个人的学习笔记总结,如有错误,感谢指正。