🔥在Java编程世界中,数据库操作是不可避免的一部分,无论是开发企业级应用还是简单的数据管理系统,都需要与数据库进行交互。而 JDBC(Java Database Connectivity)正是Java提供的一套用于连接和访问数据库的API(应用程序接口)。通过JDBC,Java程序能够执行 SQL(Structured Query Language)语句,实现数据的查询、更新、插入和删除等操作。
🔥JDBC(Java Database Connectivity)是Java的一个标准扩展,是一种用于执行SQL语句的Java API,它是Java中的数据库连接规范。这个API由 java.sql.*、javax.sql.* 包中的一些类和接口组成。为Java开发人员操作数据库提供了一个标准的API,用于访问数据库。这意味着,只要数据库支持JDBC,那么任何Java程序都可以通过这套API与数据库进行交互,而无需担心底层数据库的具体实现细节。
JDBC访问数据库层次结构:
💢JDBC的工作原理可以概括为以下几个步骤:
① 加载和注册JDBC驱动:通过Class.forName()
方法加载JDBC驱动,并将其注册到DriverManager
中。(注:这个mysql5之后可以省略注册驱动的步骤。在jar包中,存在一个java.sql.Driver配置文件,文件中指定了com.mysql.jdbc.Driver,我们下面主要使用的是 DataSource 来建立数据库连接)
Class.forName("com.mysql.cj.jdbc.Driver");
② 建立数据库连接:使用DriverManager.getConnection()
方法,根据提供的数据库URL、用户名和密码等信息,建立与数据库的连接。
Connection conn = DriverManager.getConnection(url, user, password);
③ 执行SQL语句:通过Connection
对象创建Statement
或PreparedStatement
对象,然后使用这些对象执行SQL语句,根据类型不同,可以使用不同的方法。
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM table_name"); // 查询
int rowsAffected = stmt.executeUpdate("INSERT INTO table_name VALUES (...)"); // 插入
④ 处理查询结果:如果执行的是查询操作,结果将存储在 ResultSet
对象中,那么可以通过ResultSet
对象遍历查询结果。
while (rs.next()) {
System.out.println(rs.getString("column_name"));
}
⑤ 事务管理:JDBC 允许进行手动事务控制。可以设置自动提交为 false
,并在需要时提交或回滚事务 (这个暂时不涉及)
conn.setAutoCommit(false); // 关闭自动提交
// 执行多条 SQL 语句
conn.commit(); // 提交
// 或者
conn.rollback(); // 回滚
⑥ 关闭连接:操作完成后,需要关闭ResultSet
、Statement
和Connection
对象,以释放数据库资源。
rs.close();
stmt.close();
conn.close();
下面我们以 IDEA 这个应用为例
方法一:
1.打开 MySQL 官网:https://www.mysql.com/ mysql官网 2.点击 downloads,把页面滚动到最下面,点击 MySQL Community (GPL) Downloads
3.点击 Connector/J
4.点击 General Availability(GA) Releases,在 Select Operating System 下拉列表选择 Platform Independ
方法二:
1.从中央仓库 /https://mvnrepository.com/ 下载MySQL 的 jdbc 驱动包(jar) 2.点击 搜索框,搜索 MySQL,打开 -j
3. 选择对应版本的驱动包,比如MySQL 是 5,驱动包也用 5 系列。
将mysql的驱动包放在模块下的lib(自己创建并命名的文件夹)目录下,并将该jar添加为库文件。
public class JDBCDemo01 {
public static void main(String[] args) throws Exception{
-- 1.导入jar包
-- 2.加载JDBC驱动程序:反射,这样调用初始化com.mysql.jdbc.Driver类,即将该类加载到JVM方法区,并执行该类的静态方法块、静态属性。
Class.forName("com.mysql.jdbc.Driver");
-- 3.获取连接 (连接的数据库名是db2,第二个第三个参数是连接数据库的用户名密码)
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?
user=root&password=root&useUnicode=true&characterEncoding=UTF-8","root","123456");
//MySQL数据连接的URL参数格式如下:
//jdbc:mysql://服务器地址:端口/数据库名?参数名=参数值
-- 4.获取执行者对象 (statement:表现,声明,跟程序意思不匹配)
Statement stat = conn.createStatement();
-- 5.执行sql语句,并且接收结果
String sql = "SELECT * FROM user";
ResultSet rs = stat.executeQuery(sql); //execute执行,query:查询,resultset:结果集
-- 6.处理结果
while(rs.next()) {
System.out.println(rs.getInt("id") + "\t" + rs.getString("name"));
}
-- 7.释放资源
conn.close();
stat.close();
conn.close();
}
}
💢在Java JDBC编程中对数据库的操作均使用JDK自带的API统一处理,通常与特定数据库的驱动类是完全解耦的。所以掌握Java JDBC API (位于 java.sql 包下) 即可掌握Java数据库编程。
Connection接口实现类由数据库提供,获取Connection对象通常有两种方式:
// 加载JDBC驱动程序
Class.forName("com.mysql.jdbc.Driver");
// 创建数据库连接
Connection connection = DriverManager.getConnection(url);
DataSource ds = new MysqlDataSource();
((MysqlDataSource) ds).setUrl("jdbc:mysql://localhost:3306/test");
((MysqlDataSource) ds).setUser("root");
((MysqlDataSource) ds).setPassword("root");
Connection connection = ds.getConnection();
以上两种方式的区别是:
Statement对象主要是将SQL语句发送到数据库中。JDBC API中主要提供了三种Statement对象
💢实际开发中最常用的是PreparedStatement对象,以下对其的总结:
💢主要掌握两种执行SQL的方法:
public class Demo1 {
public static void main(String[] args) throws SQLException {
//URL语法格式如下
//jdbc:mysql:是固定的写法,后面跟主机名localhost,3306是默认的MySQL端口号
//serverTimezone=UTC是指定时区时间为世界统一时间 // 这个需要带上
//useUnicode=true是指是否使用Unicode字符集,赋值为true
//characterEncoding=utf-8是指定字符编码格式为UTF8
//Connection conn=null;
//Connection接口代表Java程序和数据库的连接对象,只有获得该连接对象后,才能访问数据库,并操作数据表
// 1、先创建DataSource
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource) dataSource).setUrl("jdbc:mysql://localhost:3306/test?serverTimezone=UTC&characterEncoding=utf-8&useUnicode=false"); // 向下转型
((MysqlDataSource) dataSource).setUser("root");
((MysqlDataSource) dataSource).setPassword("123456");
// 2. 建立和数据库服务器之间的连接,连接好了之后,才能进行后续的 请求 -- 响应 交互
Connection connection = dataSource.getConnection();
// 3. 构造 sql (代码中的 sql 不需要写 ;)
//String sql = "insert into student values(1, '张三')";
String sql = "delete from student where id = 1";
PreparedStatement statement = connection.prepareStatement(sql);
// 4. 把 sql 发给 服务器,返回值是一个整数,表示影响到的行数。
int n = statement.executeUpdate();
System.out.println("n = " + n);
// 5. 执行完毕之后,最后一个步骤,关闭连接,释放资源。 注:是后获取到的资源,先释放
statement.close();
connection.close();
}
}
假如存在一个名叫 test 的数据库,其有一个 student 这样的表,如下:
select * from student;
+------+-----------+
| id | name |
+------+-----------+
| 100 | 李四 |
| 2 | |
| 23 | |
| 3 | |
| 2 | zhangsan |
+------+-----------+
我们想要通过 jdbc 代码来查询 student 表中 id = 2 的行,使用如下:
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 Demo2 {
public static void main(String[] args)throws SQLException {
// 1. 创建DataSource
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource) dataSource).setUrl("jdbc:mysql://localhost:3306/test?serverTimezone=UTC&characterEncoding=utf-8&useUnicode=false");
((MysqlDataSource) dataSource).setUser("root");
((MysqlDataSource) dataSource).setPassword("123456");
// 2. 建立连接
Connection connection = dataSource.getConnection();
// 3. 构造 sql
String sql = "select * from student where id = 2";
PreparedStatement statement = connection.prepareStatement(sql);
// 4. 执行sql (和 demo1 不同)
// Resulset 就表示查询的 结果集合(临时表)
ResultSet resultSet = statement.executeQuery(); //返回的是结果集合
// 5, 遍历结果集合
// 通过 next 方法 就可以获取到临时表的每一行数据,如果获取到最后一行之后,再进行 next 返回 false,循环结束
while(resultSet.next()){
// 针对这一行进行处理
// 取出列的数据
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
System.out.println("id = " + id + ", name = " + name);
}
// 6. 释放资源
resultSet.close();;
statement.close();
connection.close();
}
}
//结果显示如下:
id = 2, name =
id = 2, name = zhangsan
💢由上面我们学习到了 驱动包的导入,以及了解到了JDBC(Java Database Connectivity)作为Java提供的一套用于数据库连接的API,允许Java程序通过SQL语句与数据库进行交互,实现数据的增删改查等操作。JDBC简化了数据库访问的复杂性,提高了Java程序的可移植性和灵活性。
💞 💞 💞那么本篇到此就结束,希望我的这篇博客可以给你提供有益的参考和启示,感谢大家支持!!!祝大家天天开心