目录
JDBC简介
JDBC(Java Database Connectivity)是 Java 提供的一种用于与关系型数据库进行交互的 API(应用程序接口)。它允许 Java 应用程序通过标准的 SQL 语句来访问和操作数据库。
JDBC 提供了一组接口和类,用于连接数据库、执行 SQL 查询和更新操作、处理结果集等。通过 JDBC,开发人员可以使用 Java 代码来实现与数据库的通信,而不需要关注底层数据库的具体实现细节。
JDBC 的主要组件包括:
-
DriverManager:用于管理数据库驱动程序的加载和连接。
-
Connection:表示与数据库的连接,通过它可以创建 Statement 或 PreparedStatement 对象来执行 SQL 语句。
-
Statement 和 PreparedStatement:用于执行 SQL 查询和更新操作,并可以获取结果集。
-
ResultSet:表示查询结果的集合,开发人员可以使用 ResultSet 对象来访问和处理查询结果。
JDBC使用基本步骤
-
加载数据库驱动程序,可以使用
Class.forName()
方法来加载驱动程序类。 -
建立与数据库的连接,通过
DriverManager.getConnection()
方法获取 Connection 对象。 -
创建 Statement 或 PreparedStatement 对象,通过它们执行 SQL 语句。
-
处理查询结果或更新操作。
-
关闭连接和相关资源,释放数据库资源。
DriverManager
DriverManager 是 JDBC API 中的一个类,它负责加载和管理数据库驱动程序,并建立与数据库的连接。它提供了一组静态方法,用于注册驱动程序、获取数据库连接和管理驱动程序的加载。
DriverManager 的主要功能包括:
-
注册驱动程序:在使用 DriverManager 建立数据库连接之前,需要先注册相应的数据库驱动程序。可以使用
Class.forName()
方法来动态加载驱动程序类,或者直接调用DriverManager.registerDriver()
静态方法(DriverManager类加载时会自动调用)来注册指定的驱动程序。 -
获取数据库连接:通过调用
DriverManager.getConnection()
方法来获取与数据库的连接。该方法接受一个表示数据库 URL、用户名和密码的参数,并返回一个 Connection 对象,通过该对象可以执行 SQL 语句和处理结果集。 -
管理驱动程序:DriverManager 负责加载并管理驱动程序。当调用
getConnection()
方法时,DriverManager 会根据传入的数据库 URL 自动选择合适的驱动程序来建立连接。它会按照注册的驱动程序顺序依次尝试,直到找到可用的驱动程序。
Connection
JDBC 的 Connection 接口代表着 Java 程序与数据库之间的连接。它提供了操作数据库的基本方法,包括创建 Statement、PreparedStatement、CallableStatement 对象,管理事务,设置连接属性等。
Connection 接口中一些常用的方法包括:
- createStatement():创建一个用于发送简单 SQL 语句的 Statement 对象。
- prepareStatement():创建一个 PreparedStatement 对象,用于发送带有参数的 SQL 语句。
- setAutoCommit():设置是否自动提交事务。
- commit():提交当前事务。
- rollback():回滚当前事务。
- close():关闭连接。
Statement
JDBC 的 Statement 接口用于执行静态 SQL 语句并返回结果。它是 Connection 接口的一个方法,用于发送简单的 SQL 语句给数据库执行,如查询、插入、更新和删除操作。
Statement 接口中一些常用的方法包括:
- executeQuery():用于执行查询语句,返回一个 ResultSet 对象,该对象包含了查询结果。
- executeUpdate():用于执行更新语句,返回一个 int 值,表示受影响的行数。
- execute():用于执行任意 SQL 语句,可以是查询语句或更新语句,根据语句类型返回不同的结果。
- addBatch():将多个 SQL 语句添加到批处理中,以便一次性执行。
- clearBatch():清空当前批处理中的所有 SQL 语句。
- executeBatch():执行批处理中的所有 SQL 语句,并返回一个 int 数组,表示每个 SQL 语句执行后受影响的行数。
- close():关闭 Statement 对象。
PreparedStatement
JDBC 的 PreparedStatement 接口是用于执行带有参数的 SQL 语句的对象。与 Statement 相比,PreparedStatement 具有以下优势:
-
预编译:PreparedStatement 对象在执行之前会对 SQL 语句进行预编译,将 SQL 语句和参数分开处理。这样可以提高执行相同 SQL 语句多次的效率,因为数据库只需编译一次即可。
-
参数绑定:PreparedStatement 允许将参数绑定到 SQL 语句中,避免了手动拼接 SQL 字符串的麻烦,并且可以有效地防止 SQL 注入攻击。
-
可读性和可维护性:使用 PreparedStatement 可以将参数直接嵌入 SQL 语句中,使得 SQL 语句更易读、易维护。
PreparedStatement 接口的常用方法:
-
setXXX():用于设置 SQL 语句中的参数值,其中 XXX 可以是不同的数据类型,如 setString()、setInt()、setDouble() 等。
-
executeUpdate():用于执行 INSERT、UPDATE 和 DELETE 等 DML(数据操作语言)语句,并返回受影响的行数。
-
executeQuery():用于执行 SELECT 查询语句,并返回 ResultSet 对象,用于获取查询结果。
-
addBatch() 和 executeBatch():用于批量执行多个 SQL 语句。
ResultSet
JDBC 的 ResultSet 接口用于表示 SQL 查询的结果集,它提供了一种类似于游标的方式来遍历查询结果,并可以获取每一行数据的各个字段的值。ResultSet 对象通过执行查询操作获得,它通常由 Statement 或者 PreparedStatement 的 executeQuery() 方法返回。
ResultSet 接口中一些常用的方法包括:
- next():将游标移动到下一行,并返回一个布尔值,表示是否存在下一行数据。
- getXXX():用于获取当前行指定列的值,其中 XXX 可以是不同的数据类型,如 getString()、getInt()、getDouble() 等。
- previous() 和 absolute():移动游标到上一行或指定行。
- isFirst()、isLast()、isBeforeFirst()、isAfterLast():判断游标当前位置相对于结果集的位置。
- close():关闭 ResultSet 对象,释放数据库资源。
示例:
import java.sql.*;
public class JDBCSample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydb";
String user = "username";
String password = "password";
try (Connection connection = DriverManager.getConnection(url, user, password)) {
try (Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM employees")) {
while (resultSet.next()) {
String name = resultSet.getString("name");
int age = resultSet.getInt("age");
double salary = resultSet.getDouble("salary");
System.out.println("Name: " + name + ", Age: " + age + ", Salary: " + salary);
}
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}