供对这些行中数据的访问。每调用一次ResultSet的next()方法,游标就向结果集中的下一行移动。当游标指向某一行时,就可以通过ResultSet对象提供的getXXX()方法来获取这一行中各列的数据。这些方法的具体类型(如getInt(), getString()等)取决于列的数据类型。
例如,如果要从结果集中读取姓名和年龄两列的数据,可以这样写:
```java
while (rs.next()) {
String name = rs.getString("name");
int age = rs.getInt("age");
System.out.println("Name: " + name + ", Age: " + age);
}
```
其中,“name”和“age”是数据库表中列的名称。如果列名已知,可以直接使用。如果不确定列名,也可以使用列的索引,索引从1开始。例如:
```java
while (rs.next()) {
String name = rs.getString(1); // 假设"Name"列是第一列
int age = rs.getInt(2); // 假设"Age"列是第二列
System.out.println("Name: " + name + ", Age: " + age);
}
```
处理完结果集后,应该关闭ResultSet,Statement和Connection对象,以释放资源。这可以通过调用它们的close()方法来完成。
```java
rs.close();
stmt.close();
con.close();
```
7、异常处理和资源清理
在进行JDBC编程时,应始终考虑到可能发生的SQLException。这些异常可能在任何操作中发生,包括加载驱动、创建连接、执行SQL语句和处理结果集。因此,在每个操作之后都应该检查是否抛出了SQLException,并妥善处理。
此外,即使没有发生异常,也应该确保在使用完毕后关闭所有打开的资源,包括ResultSet、Statement和Connection对象。这通常可以通过finally块或者使用try-with-resources语句(自Java 7起支持)来实现。
JDBC连接数据库并执行SQL语句的过程涉及到加载驱动、提供URL、创建连接、创建Statement、执行SQL语句、处理结果以及异常处理和资源清理等多个步骤。每个步骤都有其特定的操作和注意事项,开发者需要熟悉这些流程并正确地编写代码,才能确保应用程序能够有效地与数据库进行交互。
为了进一步加深理解,下面是一个完整的示例代码,演示如何使用JDBC连接MySQL数据库并执行简单的SQL查询:
```java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JdbcExample {
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 加载驱动
Class.forName("com.mysql.jdbc.Driver");
// 创建连接
conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8", "root", "root");
// 创建Statement
stmt = conn.createStatement();
// 执行查询
rs = stmt.executeQuery("SELECT * FROM users");
// 处理结果
while (rs.next()) {
String name = rs.getString("name");
int age = rs.getInt("age");
System.out.println("Name: " + name + ", Age: " + age);
}
} catch (ClassNotFoundException e) {
System.out.println("找不到驱动程序类,加载驱动失败!");
e.printStackTrace();
} catch (SQLException e) {
System.out.println("数据库连接或查询失败!");
e.printStackTrace();
} finally {
// 关闭资源
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
```
这个示例展示了从加载驱动到处理结果的整个过程,包括异常处理和资源清理,是一个较为完整的JDBC使用示例。