JDBC数据库操作与连接池管理
发布时间: 2023-12-17 05:12:32 阅读量: 12 订阅数: 13
# 第一章:JDBC数据库操作基础
## 1.1 JDBC简介
JDBC(Java Database Connectivity)是Java语言操作数据库的标准API,提供了Java程序与不同关系型数据库的连接和操作能力。
### JDBC的主要组件
JDBC主要由以下组件组成:
- **DriverManager:** 负责管理JDBC驱动程序。
- **Connection:** 代表一个数据库连接。
- **Statement/PreparedStatement/CallableStatement:** 用于执行SQL语句。
- **ResultSet:** 代表SQL查询的结果集。
## 1.2 JDBC的连接步骤
使用JDBC连接数据库的基本步骤如下:
1. 加载数据库驱动程序:`Class.forName("com.mysql.jdbc.Driver")`。
2. 建立数据库连接:`Connection connection = DriverManager.getConnection(url, username, password)`。
3. 创建Statement对象:`Statement statement = connection.createStatement()`。
4. 操作数据库:执行SQL语句并处理结果。
5. 关闭数据库连接:`connection.close()`。
## 1.3 使用JDBC执行SQL查询和更新操作
### 执行SQL查询
```java
// 创建连接和Statement
Connection connection = DriverManager.getConnection(url, username, password);
Statement statement = connection.createStatement();
// 执行查询
String query = "SELECT * FROM table_name";
ResultSet resultSet = statement.executeQuery(query);
// 处理查询结果
while (resultSet.next()) {
// 处理每一行数据
}
// 关闭连接
connection.close();
```
### 执行SQL更新
```java
// 创建连接和Statement
Connection connection = DriverManager.getConnection(url, username, password);
Statement statement = connection.createStatement();
// 执行更新
String update = "UPDATE table_name SET column1 = value1 WHERE condition";
int rowsAffected = statement.executeUpdate(update);
// 处理更新结果
// ...
// 关闭连接
connection.close();
```
## 1.4 JDBC异常处理机制
在JDBC编程中,应该充分考虑异常处理,常见的操作包括try-catch-finally结构以及自定义异常处理。示例代码:
```java
try {
// JDBC操作
} catch (SQLException e) {
// 处理异常
} finally {
// 关闭资源
}
```
以上是第一章的内容,后续章节将继续深入讲解JDBC的高级技术、连接池管理等内容。
## 第二章:JDBC高级技术
### 2.1 批量更新与批量插入
批量更新和批量插入可以显著提高数据库操作的效率。通过一次性提交多个SQL语句,可以减少与数据库的通信开销。
在JDBC中,可以使用`Statement`或`PreparedStatement`来执行批量操作。下面是一个示例代码:
```java
String updateSql = "UPDATE students SET score = ? WHERE id = ?";
try (Connection connection = DriverManager.getConnection(url, username, password);
PreparedStatement statement = connection.prepareStatement(updateSql)) {
connection.setAutoCommit(false); // 关闭自动提交事务
for (int i = 0; i < ids.length; i++) {
statement.setInt(1, scores[i]);
statement.setInt(2, ids[i]);
statement.addBatch(); // 添加到批量操作中
}
int[] result = statement.executeBatch(); // 执行批量操作
connection.commit(); // 提交事务
System.out.println("更新记录数:" + Arrays.stream(result).sum());
} catch (SQLException e) {
e.printStackTrace();
}
```
在上述代码中,首先通过`DriverManager.getConnection()`方法获取数据库连接,然后通过`connection.prepareStatement()`方法创建`PreparedStatement`对象。接着,使用`addBatch()`方法将多个更新操作添加到批量操作中。最后,通过`executeBatch()`方法执行批量操作,并调用`commit()`方法提交事务。
### 2.2 使用预处理语句
预处理语句(`PreparedStatement`)是一种预编译的SQL语句,可以提高数据库操作的效率和安全性。通过预处理语句,可以将SQL语句和参数分开处理,避免了SQL注入等安全问题。
以下是一个使用预处理语句的示例代码:
```java
String selectSql = "SELECT * FROM students WHERE score > ?";
try (Connection connection = DriverManager.getConnection(url, username, password);
PreparedStatement statement = connection.prepareStatement(selectSql)) {
statement.setInt(1, 80); // 设置参数
try (ResultSet resultSet = statement.executeQuery()) {
while (resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
int score = resultSet.getInt("score");
System.out.println("ID: " + id + ", Name: " + name + ", Score: " + score);
}
}
} catch (SQLException e) {
e.printStackTrace();
}
```
在上述代码中,首先创建了一个预处理语句,其中`?`是占位符,表示待传入的参数。通过`setXXX()`方法为参数设置具体的值。然后,通过`executeQuery()`方法执行查询操作,返回一个`ResultSet`对象,包含了查询结果。可以通过`ResultSet`对象的`getXXX()`方法来获取具体的结果。
### 2.3 结果集的处理与遍历
通过JDBC查询操作返回的结果集(`ResultSet`)包含了查询结果。可以使用`ResultSet`对象的方法来访问和遍历结果集。
以下是一个简单的结果集处理和遍历的示例代码:
```java
String selectSql = "SELECT * FROM students";
try (
```
0
0