目录
序列:JDBC - 002
前言
JDBC是一种用于在 Java 程序和数据库之间建立连接的标准API,通过 JDBC,开发人员可以轻松地与各种数据库进行交互。本文将介绍 JDBC 的基本概念、使用方法以及示例代码。
Java中操作数据库,底层基础的方式就是JDBC。
一.什么是JDBC?
JDBC (Java Database Connectivity)是 Java 语言连接数据库的标准API,它提供了一套用于执行 SQL 语句、访问和操作数据库的接口和类,由 java.sql.* 包和 javax.sql.* 包中的一些类和接口组成。通过 JDBC,开发人员可以实现与不同数据库系统的通信,无论是关系型数据库(如 MySQL、Oracle)还是非关系型数据库(如 MongoDB)。
JDBC的本质其实就是java官方提供的一套规范(接口)。用于帮助开发人员快速实现不同关系型数据库的连接!
二.JDBC 的工作原理
JDBC 为多种关系数据库提供了统一访问方式,作为特定厂商数据库访问API的一种高级抽象,它主要包含一些通用的接口和类。
JDBC使用的层级关系:Java语言(制定标准)--->JDBC API(规范)--->JDBC驱动程序(使用)--->数据库。
JDBC访问数据库层次
数据库是一个统称,包含很多关系型和非关系型数据库,常用主流的数据库有以下:
(1)MySQL数据库
(2)Oracle数据库
(3)SQL Server数据库
(4)MongoDB数据库
(5)Sqlite数据库
我们使用代码操作数据库的前提,需要数据库要提供API,使用API才能完成对数据库的各种操作。
API----->>Application Programming Interface(应用程序编程接口):是一组定义了类、方法、接口和常量的集合,用于在开发应用程序时与其它软件组件进行交互和通信。Java API 是指 Java平台提供的各种类、接口和方法,用于开发 Java 应用程序。
在API的创建过程中,由于各种数据库要是分别建立一个API,这无疑会增加学习成本。因此,Java率先站了出来,把这些数据库操作规范到一起,提供一套标准的API。所以程序员就不需要关注各种数据库API的差异,只需要掌握Java这一套API即可。
使用 Java API 可以大大加快和简化开发过程。通过调用 API 提供的方法和使用其定义的类和接口,开发人员可以利用已经封装好的功能来实现自己的应用程序,而不需要从头开始编写所有代码。Java后端数据库框架,其本质上也是JDBC的各种封装。
三.JDBC编程步骤(增删改)
增加、删除和修改这三种操作控制台不需要给予反馈,只需要对数据库的表进行更新,所以操作步骤和代码部分几乎相同;数据库的查询操作请向下划动至第四部分。
本案例以MySQL数据库(Server version: 8.0.31)为例,编译器使用Idea(2022.2)中文版,具体讲解JDBC编程操作。
JDBC 的增删改工作过程可以分为以下几个步骤:
前提操作:导入jar包
导入 JDBC 驱动程序(jar包)并添加到依赖中。
在使用 JDBC 前,我们需要先导入适用于目标数据库的 JDBC 驱动程序。驱动程序可以从数据库供应商的官方网站下载,并在项目中引入,注意数据库连接驱动应与数据库版本相匹配。
MySQL数据库的连接驱动官网下载步骤,可以参考本博主的另一篇博客:JDBC编程∶下载MySQL数据库连接驱动-CSDN博客
- 在根据文章下载完成驱动之后,将下载好的JDBC驱动包添加到依赖当中。先在一个新建Java项目中,右键该项目名称依次点击新建-目录,创建一个空目录;
新建一个空目录
- 将下载好的JDBC驱动复制-粘贴到新建的目录中去;如图:
- 然后右键新建的项目,选择添加为库;如图:
- 确定即可将JDBC驱动程序添加到项目依赖中。
(1)先创建 DataSource 对象
使用 JDBC 提供的 DataSource接口,我们可以创建一个用于获取数据库连接的对象。通过设置连接信息(如数据库 URL、用户名和密码),可以建立与数据库服务器的连接。代码如下:
//1.先创建 DataSource对象
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource) dataSource).setUrl("jdbc:mysql://localhost:3306/数据库?characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai");
((MysqlDataSource) dataSource).setUser("用户名");
((MysqlDataSource) dataSource).setPassword("密码");
先获取数据源,使用new MysqlDataSource();来进行对象的创建,然后进行数据库url、账号和密码的设置。
URL:表示网络上资源的位置。在设置dataSource.setUrl的时候,URL各部分格式表示如下:
- jdbc:mysql: 表示需要连接数据库的类型;
- //localhost 表示当前主机;
- :3306 表示主机给数据库设置的端口号;
- “数据库” 表示需要连接MySQL数据库的名称;
- ? 分隔符,表示开启设置表达式
- characterEncoding=utf8 表示设置的中文字符编码方式;
- useSSL=false 表示加密传输的禁用,禁用是为了避免数据库无法正确启动;
- allowPublicKeyRetrieval=true 表示允许公钥获取;
- serverTimezone=Asia/Shanghai 表示设置默认的时间区;
用户名,一般都会设为root,密码是自己之前安装时设置的密码。
(2)建立数据库-服务器连接
再创建 DataSource 之后,创建Connection对象,使用dataSource.getConnection()来进行数据库服务器的远程连接。连接好了之后,才能进行后续的 请求-相应和交互。
//2.建立和数据库服务器之间的连接
Connection connection = dataSource.getConnection();
注:在Connection创建时,以及后续PrepareStatement的创建都要引入java.sql包,不是其他包。
(3)创建 SQL 语句
使用 JDBC,我们可以构建各种 SQL 语句,包括查询、插入、更新和删除操作。SQL 语句以字符串的形式在 Java 代码中表示并且SQL代码中的语句不需要写";"。
构建一个sql语句,并且将一个sql语句进行解析,转换成服务器可以直接执行的数据,使用PreparedStatement statement = connection.prepareStatement(sql)来进行对sql语句的预解析,可以使服务器在处理数据的时候更快。
//3.构建SQL语句,代码中的SQL语句不需要写";"
String sql1 = "insert into student values (101,'张三')";//增加操作
PreparedStatement statement = connection.prepareStatement(sql1);
String sql2 = "delete from student where name='李四'";//删除操作
PreparedStatement statement = connection.prepareStatement(sq2);
String sql3 = "update student set ID=103 where name='王五'";//修改操作
PreparedStatement statement = connection.prepareStatement(sq3);
(4)执行 SQL 语句
将 SQL 语句通过PrepareStatement对象发送给数据库服务器,并执行。使用statement.executeUpdate()方法来进行该语句的执行,将它发送到服务器上执行,此处的n为方法的返回值,返回的是改变的行数。
//4.将SQL发送给数据库服务器
int n = statement.executeUpdate();
System.out.println("n=" + n)
(5)关闭连接与资源释放
在完成数据库操作后,需要关闭连接以释放资源,以确保程序的健壮性和效率。
- 释放顺序:后获取到的资源,先释放。
//5.关闭连接,释放资源
statement.close();
connection.close();
完整增删改代码示例:
import com.mysql.cj.jdbc.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class Main {
public static void main(String[] args) throws SQLException {
//1.先创建 DataSource对象
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource) dataSource).setUrl("jdbc:mysql://localhost:3306/java_110?characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai");
((MysqlDataSource) dataSource).setUser("root");
((MysqlDataSource) dataSource).setPassword("123456");
//2.建立和数据库服务器之间的连接,连接好了之后,才能进行后续的 请求-相应 交互
Connection connection = dataSource.getConnection();
//3.构建SQL语句,代码中的SQL语句不需要写";"
String sql1 = "insert into student values (101,'张三')";//增加操作
PreparedStatement statement = connection.prepareStatement(sql1);
//String sql2 = "delete from student where name='李四'";//删除操作
//PreparedStatement statement = connection.prepareStatement(sq2);
//String sql3 = "update student set ID=103 where name='王五'";//修改操作
//PreparedStatement statement = connection.prepareStatement(sq3);
//4.将SQL发送给数据库服务器
int n = statement.executeUpdate();
System.out.println("n=" + n);
//5.关闭连接,释放资源,释放顺序:后获取到的资源,先释放
statement.close();
connection.close();
}
}
四.JDBC查询操作
在进行JDBC的查询操作时,导入jar包驱动的操作和增删查的前三步骤完全相同,按照上文操作即可。在上文第(4)步执行SQL语句时,出现不同,具体查询的操作步骤如下:
(1)(2)(3)步骤:同上文
(4)执行 SQL 语句
//4.将SQL发送给数据库服务器
ResultSet resultSet = statement.executeQuery();
- 使用
executeUpdate
方法执行更新操作(如插入、更新、删除),返回一个整数,表示改变的行数; - 使用
executeQuery
方法执行查询操作,返回一个结果集;
(5)遍历结果集
根据执行的 SQL 操作,我们可以对执行结果进行处理。通过 JDBC 提供的类和方法,我们可以获取查询结果集。
- ResultSet表示查询的结果集(临时表);
- 通过naxt()方法,可以获取临时表中的每行数据;
- resultSet提供了getXXX方法(getInt("列名")或getString("列名")等),查询的列是什么类型,则使用什么类型的方法;
//5.遍历结果集
while (resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString("name"); // 使用getString()方法获取字符串字段
System.out.println("id =" + id + ", name =" + name);
}
(6)释放资源
在完成数据库操作后,需要关闭连接以释放资源,以确保程序的健壮性和效率。
释放顺序:后获取到的资源,先释放。
//6.关闭连接,释放资源
resultSet.close();
statement.close();
connection.close();
完整查询代码示例:
下述代码,表示查询数据库中,student表中,id列和name列的全部数据。
import com.mysql.cj.jdbc.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class Main {
public static void main(String[] args) throws SQLException {
//1.先创建 DataSource
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource) dataSource).setUrl("jdbc:mysql://localhost:3306/数据库名" +
"?characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai" +
"&useUnicode=true"); // 设置useUnicode为true
((MysqlDataSource) dataSource).setUser("数据库用户名");
((MysqlDataSource) dataSource).setPassword("数据库密码");
//2.建立和数据库服务器之间的连接,连接好了之后,才能进行后续的 请求-相应 交互
Connection connection = dataSource.getConnection();
//3.构建SQL语句
String sql = "SELECT * FROM student";
PreparedStatement statement = connection.prepareStatement(sql);
//4.将SQL发送给数据库服务器
ResultSet resultSet = statement.executeQuery();
//5.遍历结果集
while (resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString("name"); // 使用getString()方法获取字符串字段
System.out.println("id =" + id + ", name =" + name);
}
//6.关闭连接,释放资源
resultSet.close();
statement.close();
connection.close();
}
}
五.JDBC编程总结
JDBC 是 Java 连接数据库的标准API,它提供了一套简单而强大的接口和类用于与数据库进行交互。通过 JDBC,我们可以轻松地执行各种数据库操作,包括查询、插入、更新和删除等。
JDBC的操作步骤大致如下所示:
- 创建DataSource对象;
- 建立数据库和服务器的连接;
- 构建sql语句;
- 执行sql语句;
- 遍历结果集;
- 关闭连接,释放资源;
在本文中,我们介绍了 JDBC 的工作原理和基本步骤,并演示了使用 JDBC 向数据库增加、删除、修改和查询操作的示例代码。
通过学习和实践 JDBC,将能够更加灵活和高效地处理与数据库相关的任务。希望本文对你的学习和开发工作有所帮助!😇
希望这篇博客对你有帮助!如果有其他问题或需要进一步帮助,请随时提问。🙂😀😁