本文内容大多基于官方文档和网上前辈经验总结,经过个人实践加以整理积累,仅供参考。
1 ResultSet 简介
(1) ResultSet:结果集,封装了使用 JDBC 进行查询的结果
(2) 通过调用 Statement 对象的 executeQuery(sql) 方法创建该对象
(3) ResultSet 对象以逻辑表格的形式封装了执行数据库操作的结果集,ResultSet 接口由数据库厂商实现
(4) ResultSet 对象维护了一个指向当前数据行的游标,初始的时候,游标在第一行之前,可以通过 ResultSet 对象的 next() 方法移动到下一行,如果下一行有效则返回 true,否则返回 false,相当于 Iterator 的 hasNext() 和 next() 方法的结合体
(5) 当指针(游标)指向一行时,可以通过用 getXXX(index) 或 getXXX(columnName) 获取每一列的值,index 从 1 开始,如 getInt(1),getString(“name”)
(6) ResultSet 也需要关闭
2 因为 ResultSet 也需要关闭,所以 JDBC 工具类释放数据库资源的方法需要重构
/**
* 关闭数据库连接资源
*/
public static void release(ResultSet rs, Statement stmt, Connection conn) {
if (rs != null) {
try {
rs.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (stmt != null) {
try {
stmt.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
3 准备测试数据
4 编写单元测试
(1) 获取单一记录
@Test
public void testResultSet() {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 获取Connection
conn = JDBCTool.getConnection();
// 获取Statement
stmt = conn.createStatement();
// 准备SQL
String sql = "SELECT id, name, email, birth FROM person WHERE id=1";
// 执行查询得到 ResultSet
rs = stmt.executeQuery(sql);
// 处理ResultSet
if (rs.next()) {
int id = rs.getInt(1);
String name = rs.getString("name");
String email = rs.getString(3);
Date birth = rs.getDate(4);
System.out.println(id);
System.out.println(name);
System.out.println(email);
System.out.println(birth);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCTool.release(rs, stmt, conn);
}
}
运行结果:
(2) 获取多条记录
@Test
public void testResultSet2() {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 获取Connection
conn = JDBCTool.getConnection();
// 获取Statement
stmt = conn.createStatement();
// 准备SQL
String sql = "SELECT id, name, email, birth FROM person";
// 执行查询得到 ResultSet
rs = stmt.executeQuery(sql);
// 处理ResultSet
while (rs.next()) {
int id = rs.getInt(1);
String name = rs.getString("name");
String email = rs.getString(3);
Date birth = rs.getDate(4);
System.out.println(id);
System.out.println(name);
System.out.println(email);
System.out.println(birth);
System.out.println();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCTool.release(rs, stmt, conn);
}
}
运行结果: