### JDBC连接及数据库操作
#### 一、JDBC概述与连接方式
JDBC(Java Database Connectivity)是Java中用于操作数据库的标准API,它提供了一种规范来访问各种类型的数据库,如Oracle、MySQL、SQL Server等。JDBC允许Java应用程序与各种数据库进行通信,通过统一的接口实现对不同数据库的操作。
在连接数据库时,JDBC提供了多种连接方式,包括:
1. **JDBC-ODBC桥接**:这是早期JDBC版本中使用的连接方式,通过将JDBC调用转换为ODBC调用来实现数据库连接。这种方式依赖于ODBC驱动程序,并且性能较低。连接字符串格式为:
```
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
jdbc:odbc:[odbcsource]
```
其中`odbcsource`是ODBC数据源名称。
2. **Native-API驱动**:这种方式不通过ODBC,而是直接使用数据库供应商提供的Java驱动程序,提供了更好的性能和功能支持。例如,对于Oracle数据库,可以使用以下代码进行连接:
```
Class.forName("oracle.jdbc.driver.OracleDriver");
jdbc:oracle:thin:@[ip]:[port]:[sid]
```
3. **纯Java驱动**:随着技术的发展,许多数据库厂商提供了纯Java驱动程序,无需任何本地库,使得部署更加简单。例如,MySQL的JDBC驱动:
```
com.mysql.jdbc.Driver
jdbc:mysql://[ip]:[port]/[database]?useSSL=false&allowPublicKeyRetrieval=true
```
#### 二、数据库操作
一旦建立了JDBC连接,就可以执行各种数据库操作,如创建表、插入数据、更新记录、删除数据等。以下是一些基本的数据库操作示例:
1. **创建表**:使用`CREATE TABLE`语句创建一个名为`issuser`的表,包含`user_id`、`user_balance`、`user_name`、`user_birthday`等字段。
```sql
CREATE TABLE issuser (
user_id NUMBER(5) PRIMARY KEY,
user_balance NUMBER(9,2),
user_name VARCHAR2(20),
user_birthday DATE,
user_photo BLOB,
user_doc CLOB,
user_file BFILE,
user_age INT
);
```
2. **插入数据**:使用`INSERT INTO`语句向`issuser`表中插入一条记录。
```sql
INSERT INTO issuser (user_id, user_name, user_birthday) VALUES (1, 'test', sysdate);
```
3. **更新数据**:使用`UPDATE`语句修改`issuser`表中的数据。
```sql
UPDATE issuser SET user_name = 'newname' WHERE user_id = 1;
```
4. **删除数据**:使用`DELETE`语句删除`issuser`表中的特定记录。
```sql
DELETE FROM issuser WHERE user_id = 1;
```
5. **事务管理**:JDBC还提供了事务处理机制,可以使用`Connection`对象的`commit()`和`rollback()`方法来控制事务的提交或回滚,确保数据的一致性和完整性。
#### 三、JDBC编程步骤
1. **加载驱动程序**:通过`Class.forName()`方法加载数据库驱动程序。
```java
Class.forName("com.mysql.jdbc.Driver");
```
2. **建立连接**:使用`DriverManager.getConnection()`方法建立到数据库的连接。
```java
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password");
```
3. **创建语句对象**:通过`Connection`对象的`createStatement()`方法创建`Statement`对象。
```java
Statement stmt = conn.createStatement();
```
4. **执行SQL语句**:使用`Statement`对象执行SQL语句。
```java
ResultSet rs = stmt.executeQuery("SELECT * FROM issuser");
```
5. **处理结果集**:遍历`ResultSet`对象,处理查询结果。
```java
while (rs.next()) {
System.out.println(rs.getString("user_name"));
}
```
6. **关闭资源**:确保关闭所有打开的资源,如`ResultSet`、`Statement`和`Connection`。
```java
rs.close();
stmt.close();
conn.close();
```
JDBC提供了强大的工具集来处理数据库操作,从简单的查询到复杂的事务处理,都是通过标准化的API实现的,大大简化了Java应用程序与数据库的交互过程。然而,正确地使用JDBC,尤其是在处理资源管理和异常处理方面,仍然是开发人员需要关注的重点。