Java数据库连接技术全解析
立即解锁
发布时间: 2025-08-17 02:29:10 阅读量: 4 订阅数: 12 


Java网络编程与文件处理入门
### Java数据库连接技术全解析
#### 1. 可滚动结果集操作
在数据库操作中,可滚动结果集的操作十分重要。使用`previous`方法时的输出顺序与使用`next`方法时相反。在反向遍历数据行之前,若游标已处于正向遍历结束时的最后一行之后,就无需显式地移动到数据行末尾;若不是这种情况,可以使用`afterLast`方法将游标定位到最后一行之后,示例代码如下:
```java
results.afterLast();
```
与之类似,`beforeFirst`方法可将游标定位到结果集的第一行之前,`getRow`方法能返回当前行的行号。
#### 2. 通过Java方法修改数据库
JDBC 2提供了直接通过Java方法修改结果集行的功能,并且这些更改会反映到数据库中。要实现这一点,需要使用`createStatement`的第二个版本,并将`ResultSet.CONCUR_UPDATABLE`作为第二个参数。虽然可更新的结果集对象不一定需要可滚动,但在进行更改时,通常希望能自由移动结果集行,因此使结果集可滚动是合理的。示例代码如下:
```java
Statement statement = link.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
```
数据库数据的更改有三种类型:
- **更新**:对选定行的部分或所有字段进行更新。
- **插入**:插入新的数据行。
- **删除**:删除现有的数据库行。
##### 2.1 更新操作
更新操作的核心是一组`updateXXX`方法,这些方法类似于用于从结果集中检索数据的`getXXX`方法。每个`updateXXX`方法对应数据库中可能保存的一种数据类型,例如`updateString`和`updateInt`分别用于更新`String`和`int`数据。每个方法接受两个参数:
- 一个字符串,指定要更新的字段的名称。
- 一个适当类型的值,将被分配给该字段。
更新过程包括三个步骤:
1. 将结果集游标定位到所需的行。
2. 调用适当的`updateXXX`方法。
3. 调用`updateRow`方法。
示例代码如下:
```java
results.absolute(2); // 移动到结果集的第2行。
results.updateFloat("balance", 42.55f);
results.updateRow();
```
注意,在浮点字面量后必须附加`f`,以防止编译器将该值解释为`double`。
##### 2.2 插入操作
插入操作时,新行最初存储在一个名为“插入行”的特殊缓冲区中,插入过程包括三个步骤:
1. 调用`moveToInsertRow`方法。
2. 为行中的每个字段调用适当的`updateXXX`方法。
3. 调用`insertRow`方法。
示例代码如下:
```java
results.moveToInsertRow();
results.updateInt("acctNum", 999999);
results.updateString("surname", "Harrison");
results.updateString("firstNames", "Christine Dawn");
results.updateFloat("balance", 2500f);
results.insertRow();
```
插入后调用`getXXX`方法可能无法检索新插入行的值。如果特定数据库出现这种情况,则需要关闭结果集并创建一个新的结果集(使用原始查询),以便识别新插入的行。
##### 2.3 删除操作
不使用SQL删除行只需两个步骤:
1. 移动到适当的行。
2. 调用`deleteRow`方法。
示例代码如下:
```java
results.absolute(3); // 移动到第3行。
results.deleteRow();
```
需要注意的是,JDBC驱动程序处理删除操作的方式可能不同。有些会从结果集中完全删除该行,而有些则使用空白行作为占位符,后者不会改变原始行号。
##### 2.4 综合示例
以下是一个综合了更新、插入和删除操作的示例代码:
```java
import java.sql.*;
public class JDBC2Mods {
private static Connection link;
private static Statement statement;
private static ResultSet results;
public static void main(String[] args) {
try {
// 步骤1...
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
// 步骤2...
link = DriverManager.getConnection("jdbc:odbc:Finances", "", "");
} catch (ClassNotFoundException cnfEx) {
System.out.println("* Unable to load driver! *");
System.exit(1);
} catch (SQLException sqlEx) {
System.out.println("* Cannot connect to database! *");
System.exit(1);
}
try {
// 步骤3...
statement = link.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
String select = "SELECT * FROM Accounts";
System.out.println("\nInitial contents of table:\n");
// 步骤4和5...
displayTable();
// 步骤6开始...
// 首先进行更新...
results.absolute(2);
// (移动到结果集的第2行。)
results.updateFloat("balance", 42.55f);
results.updateRow();
// 现在进行插入...
results.moveToInsertRow();
results.updateInt("acctNum", 999999);
results.updateString("surname", "Harrison");
results.updateString("firstNames", "Christine Dawn");
results.updateFloat("balance", 2500f);
results.insertRow();
// 最后进行删除...
results.absolute(3); // 移动到第3行。
results.deleteRow();
System.out.println("\nNew contents of table:\n");
displayTable();
// 步骤6结束。
// 步骤7...
link.close();
} catch (SQLException sqlEx) {
System.out.println("* SQL or connection error! *");
sqlEx.printStackTrace();
System.exit(1);
}
}
public static void displayTable() throws SQLException {
String select = "SELECT * FROM Accounts";
results = statement.executeQuery(select);
System.out.println();
while (results.next()) {
System.out.println("Account no. " + results.getInt(1));
System.out.println("Account holder: " + results.getString(3) + " " + results.getString(2));
System.out.printf("Balance: %.2f %n%n", results.getFloat(4));
}
}
}
```
#### 3. 使用DataSource接口
##### 3.1 概述和支持软件
传统的通过JDBC访问远程数据库的方法使用`DriverManager`类,但现在“首选方法”是使用`DataSource`接口。该接口位于`javax.sql`包中,自J2SE 1.4起成为Java标准版的一部分。使用`DataSource`接口有两个主要优点:
- 密码和连接字符串由Web应用服务器处理,而不是硬编码在应用程序中,大大增强了安全性。
- 该方法的核心是连接池概念,这是一种更高效的处理多个数据库连接的方法,更适用于现实世界的商业数据库。
要使用`DataSource`接口,需要Java Web应用服务器的服务,这里使用的是Tomcat。Tomcat包含一个数据库连接池(DBCP)连接代理,要在Tomcat中使用DBCP,需要将以下两个文件下载到`<CATALINA_HOME>\common\lib`文件夹中:
- `commons-dbcp(-1.2.1).jar`
- `commons-pool(-1.2.1).jar`
下载这两个文件的步骤如下:
1. 访问`http://jakarta.apache.org/common`。
2. 点击页面左侧“Downloads”下的“Release”链接。
3. 点击中央列表中的“Commons DBCP”链接。
4. 向下滚动并点击`1.2.1.zip`(如果有更新版本则点击更新版本)。
5. 使用WinZip(或其他合适的工具),选择`commons.dbcp-(1.2.1).zip`并将其提取到`<CATALINA_HOME>\common\lib`。
6. 点击浏览器的“返回”按钮。
7. 向下滚动页面并点击中央列表中的“Commons Pool”链接。
8. 重复步骤4。
9. 重复步骤5,但从ZIP文件中选择`commons-pool-(1.2).jar`。
10. 如果上述文件保存在`<CATALINA_HOME>\common\lib`的子文件夹中,将它们移出这些子文件夹(然后删除子文件夹)。
由于DBCP使用JNDI(Java命名和目录接口),在使用之前需要配置JNDI数据源,配置步骤如下:
1. 在Web部署描述符(`web.xml`文件)中定义JNDI资源引用。
2. 在应用程序上下文中将JNDI资源
0
0
复制全文
相关推荐










