JDBC数据库编程与连接池的使用
发布时间: 2024-01-09 13:17:44 阅读量: 32 订阅数: 28
# 1. JDBC数据库编程基础
### 1.1 JDBC简介
JDBC(Java Database Connectivity)是Java语言访问数据库的标准接口,它提供了一种与数据库连接、执行SQL语句、处理查询结果等操作的方式。JDBC基于数据库的驱动程序实现,通过加载对应的数据库驱动,可以连接不同类型的数据库。
### 1.2 JDBC连接数据库
在使用JDBC时,首先需要建立与数据库的连接。通过调用`DriverManager.getConnection()`方法,可以传入数据库的连接URL、用户名和密码等参数,获取与数据库的连接对象。
下面是一个使用JDBC连接MySQL数据库的示例代码:
```java
import java.sql.*;
public class JDBCExample {
public static void main(String[] args) {
// 定义数据库连接URL、用户名和密码
String url = "jdbc:mysql://localhost:3306/my_database";
String username = "root";
String password = "123456";
try {
// 加载MySQL数据库驱动
Class.forName("com.mysql.jdbc.Driver");
// 建立数据库连接
Connection connection = DriverManager.getConnection(url, username, password);
// 执行数据库操作...
// 关闭数据库连接
connection.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
```
代码解析:
- 第11行使用`Class.forName()`方法加载MySQL数据库驱动。
- 第14行通过`DriverManager.getConnection()`方法建立与数据库的连接,传入连接URL、用户名和密码。
- 第20行关闭数据库连接。
### 1.3 JDBC执行SQL语句
连接数据库后,我们可以通过JDBC执行各种SQL语句,包括查询、更新、插入等操作。JDBC提供了`Statement`和`PreparedStatement`两种方式执行SQL语句。
#### 1.3.1 使用Statement执行SQL语句
使用`Statement`对象可以执行静态SQL语句。下面是一个使用`Statement`执行查询语句的示例代码:
```java
import java.sql.*;
public class JDBCExample {
public static void main(String[] args) {
// 定义数据库连接URL、用户名和密码...
try {
// 建立数据库连接...
// 创建Statement对象
Statement statement = connection.createStatement();
// 执行查询语句
ResultSet resultSet = statement.executeQuery("SELECT * FROM users");
// 处理查询结果
while (resultSet.next()) {
int id = resultSet.getInt("id");
String username = resultSet.getString("username");
String password = resultSet.getString("password");
System.out.println("ID: " + id + ", Username: " + username + ", Password: " + password);
}
// 关闭ResultSet、Statement和数据库连接
resultSet.close();
statement.close();
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
```
代码解析:
- 第15行创建`Statement`对象。
- 第18行使用`executeQuery()`方法执行查询语句,返回一个`ResultSet`对象。
- 第21-26行循环遍历查询结果,并输出结果。
- 第29-31行关闭`ResultSet`、`Statement`和数据库连接。
#### 1.3.2 使用PreparedStatement执行SQL语句
`PreparedStatement`对象可以预编译SQL语句,并且支持参数化查询,能够提高SQL语句的执行效率和安全性。下面是一个使用`PreparedStatement`执行插入语句的示例代码:
```java
import java.sql.*;
public class JDBCExample {
public static void main(String[] args) {
// 定义数据库连接URL、用户名和密码...
try {
// 建立数据库连接...
// 创建PreparedStatement对象,并设置参数
String sql = "INSERT INTO users(username, password) VALUES(?, ?)";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setString(1, "Alice");
statement.setString(2, "123456");
// 执行插入语句
int rows = statement.executeUpdate();
System.out.println("Insert " + rows + " row(s) successfully.");
// 关闭Statement和数据库连接
statement.close();
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
```
代码解析:
- 第18行创建`PreparedStatement`对象,并传入SQL语句。
- 第19-20行使用`setString()`方法设置参数值。
- 第23行使用`executeUpdate()`方法执行插入语句,并返回插入的行数。
- 第26行输出插入成功的行数。
- 第29-30行关闭`Statement`和数据库连接。
### 1.4 JDBC事务处理
在数据库操作中,如果需要一系列的SQL语句作为一个整体执行,要么全部成功,要么全部失败,可以使用事务来进行处理。JDBC提供了类似的事务处理机制。
下面是一个使用JDBC进行事务处理的示例代码:
```java
import java.sql.*;
public class JDBCExample {
public static void main(String[] args) {
// 定义数据库连接URL、用户名和密码...
try {
// 建立数据库连接...
// 关闭自动提交
connection.setAutoCommit(false);
// 创建Statement对象
Statement statement = connection.createStatement();
// 执行多条SQL语句
statement.executeUpdate("INSERT INTO users(username, password) VALUES('Tom', '123456')");
statement.executeUpdate("UPDATE users SET password = '654321' WHERE username = 'Jerry'");
// 提交事务
connection.commit();
System.out.println("Transaction is committed successfully.");
// 关闭Statement和数据库连接
statement.close();
connection.close();
} catch (SQLException e) {
e.printStackTrace();
try {
// 事务回滚
if (connection != null) {
connection.rollback();
}
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}
}
```
代码解析:
- 第18行使用`setAutoCommit(false)`方法关闭自动提交。
- 第23-24行执行多条SQL语句。
- 第27行使用`commit()`方法提交事务。
- 第34行如果捕获到异常,调用`rollback()`方法回滚事务。
- 第37行关闭`Statement`和数据库连接。
### 1.5 JDBC异常处理
在JDBC编程中,对异常进行合理处理可以增强代码的健壮性和稳定性。
异常处理可以使用`try-catch`语句来捕获和处理异常,以及使用`finally`语句块来确保资源的释放。
下面是一个使用JDBC进行异常处理的示例代码:
```java
import java.sql.*;
public class JDBCExample {
public static void main(String[] args) {
// 定义数据库连接URL、用户名和密码...
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
// 建立数据库连接...
// 创建Statement对象
statement = connection.createStatement();
// 执行查询语句
```
0
0