JDBC与连接池管理
发布时间: 2023-12-18 23:17:15 阅读量: 9 订阅数: 11
# 1. JDBC简介
## 1.1 JDBC概述
JDBC(Java Database Connectivity)是Java语言访问数据库的一种标准接口。它提供了一套方法和类,可以方便地连接和操作各种数据库系统。JDBC的主要目的是为了简化数据库操作的代码实现,提供了一种统一的方式来连接和操作不同的数据库。
JDBC建立在Java的数据库接口规范(Java Database API)之上,并以Java的数据库连接(Java Database Connectivity)为基础。JDBC包括了数据库连接、执行SQL语句、处理结果集等一系列功能,可以完成对数据库的增删改查操作。
## 1.2 JDBC连接的建立与关闭
在 JDBC 中,要建立与数据库的连接,需要先加载相应的数据库驱动程序,然后通过连接字符串、用户名和密码等参数来创建连接对象。连接对象可以用来执行 SQL 语句以及获取执行结果。
连接对象创建完成后,在不再使用时需要显式地调用关闭方法来释放资源,以确保连接的正常关闭。
以下是一个简单的示例代码:
```java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class JdbcConnectionExample {
public static void main(String[] args) {
Connection conn = null;
try {
// 加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
// 创建连接对象
String url = "jdbc:mysql://localhost:3306/mydatabase";
String username = "root";
String password = "123456";
conn = DriverManager.getConnection(url, username, password);
// 执行SQL语句...
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 关闭连接
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
```
代码解析:
- 首先,通过 `Class.forName()` 方法加载数据库驱动程序。
- 然后,通过 `DriverManager.getConnection()` 方法创建连接对象,传入数据库连接字符串、用户名和密码等参数。
- 最后,关闭连接对象,释放资源。
## 1.3 JDBC中的Statement及PreparedStatement
JDBC提供了两种类型的语句对象:Statement和PreparedStatement。
Statement对象用于执行静态的SQL语句,可以根据需要执行任意的SQL语句,但存在SQL注入安全风险。
PreparedStatement对象用于执行动态的SQL语句,可以预先给SQL语句传入参数,提高执行效率和安全性。
以下是一个使用Statement和PreparedStatement的示例代码:
```java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JdbcStatementExample {
public static void main(String[] args) {
Connection conn = null;
try {
// 加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
// 创建连接对象
String url = "jdbc:mysql://localhost:3306/mydatabase";
String username = "root";
String password = "123456";
conn = DriverManager.getConnection(url, username, password);
// 执行静态SQL语句
Statement statement = conn.createStatement();
String sql = "SELECT * FROM users";
ResultSet resultSet = statement.executeQuery(sql);
while (resultSet.next()) {
// 处理结果集...
}
// 执行动态SQL语句
String sql2 = "INSERT INTO users (name, age) VALUES (?, ?)";
PreparedStatement preparedStatement = conn.prepareStatement(sql2);
preparedStatement.setString(1, "John");
preparedStatement.setInt(2, 25);
preparedStatement.executeUpdate();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 关闭连接
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
```
代码解析:
- 首先,创建Statement对象并执行静态SQL语句,通过 `executeQuery()` 方法执行查询语句,返回ResultSet对象,然后可以通过 `next()` 方法遍历结果集。
- 然后,创建PreparedStatement对象并执行动态SQL语句,通过 `setXxx()` 方法传入参数,再通过 `executeUpdate()` 方法执行更新操作。
## 1.4 JDBC中的ResultSet
ResultSet是JDBC中用于表示查询结果集的对象,它提供了一系列的方法用于操作和访问结果集中的数据。
以下是一个简单的使用ResultSet的示例代码:
```java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JdbcResultSetExample {
public static void main(String[] args) {
Connection conn = null;
try {
// 加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
// 创建连接对象
String url = "jdbc:mysql://localhost:3306/mydatabase";
String username = "root";
String password = "123456";
conn = DriverManager.getConnection(url, username, password);
// 执行SQL语句
Statement statement = conn.createStatement();
String sql = "SELECT * FROM users";
ResultSet resultSet = statement.executeQuery(sql);
// 遍历结果集
while (resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
int age = resultSet.getInt("age");
System.out.println("id: " + id + ", name: " + name + ", age: " + age);
}
} catch (ClassNotFoundException e) {
e.prin
```
0
0