JDBC(Java Database Connectivity)是 Java 编程语言中用于连接和执行数据库操作的一套 API。JDBC 提供了一种基于标准的方法来建立数据库连接、执行 SQL 语句、处理结果集等。以下是 JDBC 的一些主要接口:
1. DriverManager
用途: DriverManager 类是 JDBC 的管理层,用于管理 JDBC 驱动程序的加载和建立数据库连接。
关键方法:
- getConnection(String url, String user, String password): 连接到数据库。
2. Connection
用途: Connection 接口代表数据库连接。它用于执行 SQL 语句和管理事务。
关键方法:
- createStatement(), prepareStatement(String sql), prepareCall(String sql): 创建用于执行 SQL 的 Statement、PreparedStatement 和 CallableStatement 对象。
- setAutoCommit(boolean autoCommit), commit(), rollback(): 管理事务。
- close(): 关闭连接。
3. Statement
用途: Statement 接口用于执行静态 SQL 语句并返回它所生成的结果。
关键方法:
- executeQuery(String sql): 执行返回单个 ResultSet 对象的 SQL 语句(如 SELECT)。
- executeUpdate(String sql): 执行 SQL DML(数据操作语言)语句,如 INSERT、UPDATE 或 DELETE。
close(): 关闭 Statement 对象。
4. PreparedStatement
用途: PreparedStatement 接口扩展了 Statement 接口,允许使用预编译的 SQL 语句。这提高了性能并提供了一种防止 SQL 注入的方法。
关键方法:
- setInt(int parameterIndex, int value), setString(int parameterIndex, String value), 等: 设置参数值。
- executeQuery(), executeUpdate(): 执行 SQL 语句。
5. CallableStatement
用途: CallableStatement 接口用于执行数据库存储过程。
关键方法:
- registerOutParameter(int parameterIndex, int sqlType): 注册输出参数。
- setInt(int parameterIndex, int value), setString(int parameterIndex, String value), 等: 设置输入参数。
- execute(): 执行存储过程。
6. ResultSet
用途: ResultSet 接口表示数据库查询结果。它用于读取和遍历数据。
关键方法:
- next(): 移动到结果集的下一行。
- getInt(String columnLabel), getString(String columnLabel), 等: 获取当前行的列值。
- close(): 关闭结果集。
7. DataSource
用途: DataSource 接口是一个替代 DriverManager 的方式,用于建立数据库连接。它通常与连接池一起使用。
关键方法:
- getConnection(): 获取数据库连接。
这些接口组成了 JDBC 的核心,通过它们可以实现 Java 应用程序与多种数据库之间的交互。使用 JDBC,开发者可以编写独立于底层数据库的代码,从而提高应用程序的可移植性。
执行一个事务的流程
DataSource ds = // 获取 DataSource
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = ds.getConnection();
conn.setAutoCommit(false);
String sql = "INSERT INTO your_table (column1, column2) VALUES (?, ?)";
pstmt = conn.prepareStatement(sql);
// 设置参数
pstmt.setString(1, "value1");
pstmt.setInt(2, 123);
// 执行更新
pstmt.executeUpdate();
// 可以添加更多的 SQL 操作
conn.commit(); // 提交事务
} catch (SQLException e) {
if (conn != null) {
try {
conn.rollback(); // 回滚事务
} catch (SQLException ex) {
ex.printStackTrace();
}
}
e.printStackTrace();
} finally {
// 关闭资源
if (pstmt != null) pstmt.close();
if (conn != null) conn.close();
}
DataSource通常是我们使用的连接池,比如Springboot默认使用的HikariCP连接池:
HikariDataSource ds = new HikariDataSource();
ds.setJdbcUrl("jdbc:mysql://localhost:3306/yourdb");
ds.setUsername("username");
ds.setPassword("password");
// 其他配置...
网友评论