JDBC(Java DataBase Connectivity)是一套用于在 Java 中操作关系型数据库的 API。它允许开发者使用统一的 Java 代码来访问不同的关系型数据库。
JDBC 的本质 :JDBC 是由官方(Sun 公司)定义的一套接口规范,各数据库厂商根据这套规范实现自己的数据库驱动程序(jar 包)。开发者通过 JDBC 编程,实际执行的操作是这些驱动程序中的实现。
JDBC 的优势 :1)统一接口:各数据库厂商遵循相同接口,Java 代码无需针对不同数据库进行修改;2)灵活性:可以轻松替换底层数据库,而访问数据库的 Java 代码几乎不变。
JDBC 快速入门
这里演示如何快速上手 JDBC 的使用。
(0)创建 MySQL 数据表
在 MySQL 数据库中创建一个名为 db 的 schema,在这个 schema 中创建一个 users 表,该表用于 JDBC 的快速入门。
(1)创建工程,导入驱动 jar 包
利用 IDEA 创建一个新工程,Build system 选择 IntelliJ。在项目根目录下创建一个存放 jar 包的文件夹 lib。这里以 MySQL 数据库为例,将 MySQL 的 jar 包放入 lib 中。接着,右键 jar 包选择 Add as Library...,使得当前工程能识别 jar 包。

(2)注册驱动
首先,在 src 下创建一个 JDBCDemo 类,用于实现 JDBC 的快速入门,在 main 函数中注册驱动:
java
// 1. 注册驱动
Class.forName("com.mysql.jdbc.Driver");
(3)获取连接
在获取数据库连接时,需要提供数据库名称、MySQL 用户名和密码:
java
// 2. 获取连接
String url = "jdbc:mysql://127.0.0.1:3306/db?useSSL=false";
String username = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url, username, password);
(4)定义 SQL 语句
这里以查询 users 为例:
java
// 3. 定义 sql
String sql = "SELECT * FROM users";
(5)获取执行 SQL 对象
使用 createStatement 获取 Statement 对象:
java
// 4. 获取 Statement 对象
Statement stmt = conn.createStatement();
(6)执行 SQL 语句
使用 executeQuery 执行 SQL 语句,返回 ResultSet 结果集:
java
// 5. 执行 SQL
ResultSet rs = stmt.executeQuery(sql);
(7)处理结果
遍历查询结果中的每一行,并读取相关字段:
java
// 6. 处理结果
while (rs.next()) {
int id = rs.getInt("id"); // 根据列名获取数据
String name = rs.getString("name");
String email = rs.getString("email");
System.out.println("ID: " + id + ", Name: " + name + ", Email: " + email);
}
(8)释放资源
释放该过程中使用到的资源,注意关闭资源的顺序,先开启资源后关闭:
java
// 7. 释放资源
rs.close();
stmt.close();
conn.close();
JDBC API 介绍
这部分主要是对 JDBC 相关的 API 进行说明。
DriverManager
驱动管理类(DriverManager)是一个工具类,其作用主要是:
(1)注册驱动
在 Class.forName("com.mysql.jdbc.Driver");加载 Driver 类时,该类静态代码块中使用下面的代码自动进行了驱动的注册,可以通过 Ctrl + 鼠标点击 Driver 进入代码中查看:
java
DriverManager.registerDriver(new Driver());
另外,在 mysql 5 之后的驱动 jar 中,可以省略 Class.forName("com.mysql.jdbc.Driver");这行代码。
(2)获取数据库连接
使用 getConnection 方法获取连接对象,其需要提供三个参数,分别是:连接路径(url)、数据库用户名(user)和数据库密码(password)。需要注意的是:
-
url 参数的语法:
jdbc:mysql://ip地址(域名):端口号/数据库名称?参数键值对1&参数键值对2,示例:jdbc:mysql://127.0.0.1:3306/db。 -
如果连接的是本机
MySQL服务器,并且MySQL服务默认端口是3306,则 url 可以简写为:jdbc:mysql://数据库名称?参数键值对。 -
可配置
useSSL=false参数,禁用安全连接方式,解决警告提示。
Connection
数据库连接对象(Connection)是一个与特定数据库的连接(会话)的接口,用于执行 SQL 语句并在连接的上下文中返结果,其主要作用是:
(1)获取执行 SQL 的对象
这一部分涉及到三个方法:
-
普通执行
SQL对象:Statement createStatement() -
预编译
SQL的执行SQL对象:防止SQL注入:PreparedStatement prepareStatement(sql) -
执行存储过程的对象:
CallableStatement prepareCall(sql)
(2)管理事务
Connection 接口中定义了与 MySQL 3个事务对应的方法:
- 开启事务:
setAutoCommit(boolean autoCommit)
true 为自动提交事务;false为手动提交事务,即为开启事务。
-
提交事务:
commit() -
回滚事务:
rollback()
java
// 定义 sql
String sql1 = "UPDATE users set name = 'a' where id = 1";
String sql2 = "UPDATE users set name = 'b' where id = 2";
// 获取 Statement 对象
Statement stmt = conn.createStatement();
try {
// 开启事务,确保两条sql语句执行一致
conn.setAutoCommit(false);
int count1 = stmt.executeUpdate(sql1); // 受影响行数
System.out.println(count1);
int count2 = stmt.executeUpdate(sql2); // 受影响行数
System.out.println(count2);
// 提交事务
conn.commit();
} catch (Exception e) {
// 回滚事务
conn.rollback();
throw new RuntimeException(e);
}
Statement
Statement 对象用于执行 SQL 语句,这个对象提供了不同的方法来执行不同的 SQL 语句。
(1)int executeUpdate(sql)执行 DML、DDL 语句
DDL 语句是对表和库的增删改操作,DML 语句是对数据的增删改操作,这个方法的返回值:
-
DML语句影响的行数; -
DDL语句执行后,执行成功也可能返回 0。
java
// DML
String sql = "UPDATE users set name = 'a' where id = 1";
Statement stmt = conn.createStatement();
int count = stmt.executeUpdate(sql);
System.out.println(count);
java
// DDL
String sql = "CREATE database db1";
Statement stmt = conn.createStatement();
int count = stmt.executeUpdate(sql);
System.out.println(count);
(2)ResultSet excuteQuery(sql)执行 DQL 语句
DQL 语句是对数据的查询操作,这个方法的返回值是 ResultSet 结果集对象。
java
// DDL
String sql = "SELECT * FROM users";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
while (rs.next()) {
int id = rs.getInt("id"); // 根据列名获取数据
String name = rs.getString("name");
String email = rs.getString("email");
}
rs.close();