👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主
1、什么是
一、什么是 JDBC
JDBC(Java Database Connectivity)是Java语言中用于与关系型数据库进行交互的API(Application Programming Interface)。它提供了一组类和接口,使Java应用程序能够连接、查询和操作各种数据库。
JDBC允许开发人员使用标准的SQL语句来执行数据库操作,如查询数据、插入、更新和删除记录等。它还提供了事务管理、批处理操作和元数据访问等功能。
通过JDBC,开发人员可以使用Java编程语言来构建与任何支持JDBC的关系型数据库进行交互的应用程序。开发人员可以选择适当的JDBC驱动程序来连接不同的数据库系统,如MySQL、Oracle、SQL Server等。
JDBC是Java语言中用于与关系型数据库进行交互的API,它提供了连接、查询和操作数据库的功能,使开发人员能够使用Java编写强大的数据库应用程序。
二、JDBC 的应用场景
JDBC 的应用场景非常广泛,适用于各种需要与关系型数据库进行交互的 Java 应用程序。下面是一些常见的 JDBC 应用场景:
- 数据库连接与操作:使用 JDBC 可以连接到各种关系型数据库,执行查询、插入、更新和删除等操作。它提供了执行 SQL 语句的能力,可以对数据库进行灵活的操作。
- 数据库事务管理:JDBC 支持事务管理,可以通过开启和提交事务来确保数据库操作的一致性和完整性。它提供了事务的隔离级别和回滚操作等功能。
- 数据库连接池:JDBC 连接池是一种管理数据库连接的技术,可以提高应用程序的性能和可伸缩性。通过使用连接池,可以避免频繁地创建和关闭数据库连接,提高数据库访问的效率。
- 数据库元数据访问:JDBC 提供了访问数据库元数据的功能,可以获取数据库的结构信息,如表、列、索引等。这对于动态生成 SQL 语句或者进行数据库结构分析非常有用。
- 批处理操作:JDBC 支持批处理操作,可以一次性执行多个 SQL 语句,减少与数据库的通信次数,提高效率。
- 数据库迁移和同步:通过 JDBC,可以将数据从一个数据库迁移到另一个数据库,或者将数据从文件导入到数据库中。它还可以用于数据库之间的数据同步和复制。
JDBC 可以在各种需要与关系型数据库进行交互的 Java 应用程序中使用,包括 Web 应用程序、桌面应用程序、企业应用程序等。它提供了强大的功能和灵活性,使开发人员能够轻松地操作和管理数据库。
三、JDBC 的四大核心对象
JDBC的四大核心对象是:
- Connection(连接):用于与数据库建立连接,并管理与数据库的通信。
- Statement(语句):用于执行SQL语句并与数据库进行交互。它可以是静态的(用于执行静态SQL语句)或者是可预编译的(用于执行动态SQL语句)。
- ResultSet(结果集):用于存储从数据库中检索的数据。它提供了遍历、访问和操作结果数据的方法。
- PreparedStatement(预编译语句):是Statement的子接口,它可以在执行前进行预编译,从而提高执行效率。它还可以通过设置参数来动态地执行SQL语句。
这些对象是在Java中使用JDBC进行数据库操作时的核心组件。它们提供了与数据库的连接、执行SQL语句和处理结果的功能。
四、JDBC 的使用
JDBC(Java Database Connectivity)是Java程序与数据库进行交互的标准API。以下是使用JDBC的一般步骤:
- 导入JDBC相关的包:
import java.sql.*;
- 加载数据库驱动程序:
Class.forName("com.mysql.jdbc.Driver");
- 建立数据库连接:
String url = "jdbc:mysql://localhost:3306/mydatabase"; // 数据库URL
String username = "username"; // 数据库用户名
String password = "password"; // 数据库密码
Connection connection = DriverManager.getConnection(url, username, password);
- 创建Statement对象并执行SQL查询或更新:
Statement statement = connection.createStatement();
String sql = "SELECT * FROM mytable";
ResultSet resultSet = statement.executeQuery(sql);
- 处理查询结果:
while (resultSet.next()) {
// 从结果集中获取数据
String column1 = resultSet.getString("column1");
int column2 = resultSet.getInt("column2");
// 处理数据
}
- 关闭连接和释放资源:
resultSet.close();
statement.close();
connection.close();
五、完整代码
import java.sql.*;
public class JDBCTest {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydatabase";
String username = "username";
String password = "password";
try {
// Load the MySQL JDBC driver
Class.forName("com.mysql.jdbc.Driver");
// Establish the connection
Connection connection = DriverManager.getConnection(url, username, password);
// Create a statement
Statement statement = connection.createStatement();
// Execute a query
String sql = "SELECT * FROM mytable";
ResultSet resultSet = statement.executeQuery(sql);
// Process the results
while (resultSet.next()) {
String column1 = resultSet.getString("column1");
int column2 = resultSet.getInt("column2");
System.out.println(column1 + " - " + column2);
}
// Close the resources
resultSet.close();
statement.close();
connection.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
六、JDBC 的事务控制
JDBC(Java Database Connectivity)提供了对事务控制的支持,允许开发者在Java应用程序中执行事务操作。JDBC事务控制涉及以下几个关键概念和方法:
- 开启事务:
connection.setAutoCommit(false);
这将禁用自动提交模式,使得每次执行SQL语句后都需要手动提交或回滚事务。 2. 执行SQL语句:
Statement statement = connection.createStatement();
String sql = "INSERT INTO mytable (column1, column2) VALUES ('value1', 'value2')";
statement.executeUpdate(sql);
- 提交事务:
connection.commit();
当所有的SQL语句都执行成功时,调用该方法将提交事务,将更改持久化到数据库。 4. 回滚事务:
connection.rollback();
如果在事务过程中发生了错误或者需要撤销之前的更改,可以调用该方法回滚事务,将数据库恢复到事务开始前的状态。 5. 设置保存点(Savepoint):
Savepoint savepoint = connection.setSavepoint();
可以在事务中设置保存点,以便在回滚时可以选择性地回滚到某个保存点。 6. 释放资源:
statement.close();
connection.close();
在事务操作完成后,需要关闭Statement和Connection对象,释放相关资源。
七、JDBC 的增删改查
JDBC(Java Database Connectivity)是Java程序与数据库进行交互的标准API,它提供了对数据库的增删改查操作。下面是使用JDBC进行增删改查的示例:
- 插入数据:
String sql = "INSERT INTO mytable (column1, column2) VALUES (?, ?)";
try (Connection connection = DriverManager.getConnection(url, username, password);
PreparedStatement statement = connection.prepareStatement(sql)) {
statement.setString(1, value1); // 设置参数值
statement.setString(2, value2);
statement.executeUpdate(); // 执行插入操作
} catch (SQLException e) {
e.printStackTrace();
}
- 查询数据:
String sql = "SELECT * FROM mytable";
try (Connection connection = DriverManager.getConnection(url, username, password);
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(sql)) {
while (resultSet.next()) {
String column1 = resultSet.getString("column1"); // 获取列值
String column2 = resultSet.getString("column2");
// 处理查询结果
}
} catch (SQLException e) {
e.printStackTrace();
}
- 更新数据:
String sql = "UPDATE mytable SET column1 = ? WHERE id = ?";
try (Connection connection = DriverManager.getConnection(url, username, password);
PreparedStatement statement = connection.prepareStatement(sql)) {
statement.setString(1, newValue); // 设置参数值
statement.setInt(2, id);
statement.executeUpdate(); // 执行更新操作
} catch (SQLException e) {
e.printStackTrace();
}
- 删除数据:
String sql = "DELETE FROM mytable WHERE id = ?";
try (Connection connection = DriverManager.getConnection(url, username, password);
PreparedStatement statement = connection.prepareStatement(sql)) {
statement.setInt(1, id); // 设置参数值
statement.executeUpdate(); // 执行删除操作
} catch (SQLException e) {
e.printStackTrace();
}
八、DBUtils 的使用
DBUtils是一个开源的Java库,它简化了JDBC编程,提供了更简洁、易用的API来执行数据库操作。以下是使用DBUtils的一般步骤:
- 导入DBUtils相关的包:
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
- 创建QueryRunner对象:
QueryRunner queryRunner = new QueryRunner();
- 执行查询操作:
String sql = "SELECT * FROM mytable";
try (Connection connection = DriverManager.getConnection(url, username, password)) {
List<MyTable> myTableList = queryRunner.query(connection, sql, new BeanListHandler<>(MyTable.class));
// 处理查询结果
} catch (SQLException e) {
e.printStackTrace();
}
- 执行更新操作:
String sql = "UPDATE mytable SET column1 = ? WHERE id = ?";
try (Connection connection = DriverManager.getConnection(url, username, password)) {
int rowsUpdated = queryRunner.update(connection, sql, newValue, id);
// 处理更新结果
} catch (SQLException e) {
e.printStackTrace();
}
- 执行插入操作:
String sql = "INSERT INTO mytable (column1, column2) VALUES (?, ?)";
try (Connection connection = DriverManager.getConnection(url, username, password)) {
int rowsInserted = queryRunner.update(connection, sql, value1, value2);
// 处理插入结果
} catch (SQLException e) {
e.printStackTrace();
}
- 执行删除操作:
String sql = "DELETE FROM mytable WHERE id = ?";
try (Connection connection = DriverManager.getConnection(url, username, password)) {
int rowsDeleted = queryRunner.update(connection, sql, id);
// 处理删除结果
} catch (SQLException e) {
e.printStackTrace();
}
💕💕 本文由激流原创,原创不易,希望大家关注、点赞、收藏,给博主一点鼓励,感谢!!!