介绍
JDBC(Java Database Connectivity)是Java语言中操作关系型数据库的标准API,它提供了一种访问各种关系数据库的统一方法。JDBC API由Java标准库提供,它包括一个面向关系数据库的通用的SQL接口以及一组与特定数据库厂商相关的驱动包。
ResultSet是JDBC API的一部分,它封装了通过查询数据库返回的结果集数据。ResultSet对象是一个包含查询结果的表格,可以通过它的方法读出内容。本文将介绍如何使用JDBC程序浏览ResultSet。
获取ResultSet对象
当使用Java语言的JDBC API时,程序首先需要与数据库建立连接,然后创建Statement对象,通过Statement.executeQuery()方法向数据库发送查询语句,并返回结果集对象ResultSet。
Connection conn = DriverManager.getConnection(url,user,password);//建立连接
Statement stmt = conn.createStatement();//创建Statement对象
ResultSet rs = stmt.executeQuery("SELECT * FROM users");//发送查询语句,获取结果集
遍历ResultSet
通过ResultSet对象,我们可以使用若干方法来遍历结果集中的记录。
使用next()方法遍历结果集
使用ResultSet.next()方法,它返回一个Boolean类型,表示结果集中是否还有下一条记录。next()方法将当前行移动到结果集的下一行,如果当前行是结果集的最后一行,则返回false。可以通过while循环来遍历结果集中的所有记录,应该注意的是,对于返回大量数据的查询结果,在每次循环迭代时可能会造成很大的开销,并且有可能导致性能问题,具体使用时需要见仁见智,根据具体情况而定。
while (rs.next()) {
//获取记录中的某些字段值,比如name和age
String name = rs.getString("name");
int age = rs.getInt("age");
}
使用forEach()方法遍历结果集
除了使用while循环遍历外,还可以使用Java 8中引入的forEach()方法来遍历结果集。ResultSet接口实现了Java 8中的Iterable接口,因此可以使用forEach()方法遍历。当使用forEach()方法时,我们需使用Lambda表达式来指定处理每个记录的逻辑。
rs.forEach(record -> {
String name = record.getString("name");
int age = record.getInt("age");
});
使用getter方法获取结果集的值
ResultSet对象提供一系列的getter方法,可以用来获取结果集的值。在获取具体的值时,我们需要根据类型使用getter方法,比如getString()、getInt()等。下面列举JDBC API中可用getter方法的一些示例:
getString()方法
获取String类型的值
String name = rs.getString("name");
getInt()方法
获取int类型的值
int age = rs.getInt("age");
getDouble()方法
获取double类型的值
double salary = rs.getDouble("salary");
getDate()方法
获取日期类型的值,返回java.sql.Date类型的对象
java.sql.Date date = rs.getDate("date");
getTime()方法
获取时间类型的值,返回java.sql.Time类型的对象
java.sql.Time time = rs.getTime("time");
getTimestamp()方法
获取时间戳类型的值,返回java.sql.Timestamp类型的对象
java.sql.Timestamp timestamp = rs.getTimestamp("timestamp");
通过列索引获取ResultSet的值
ResultSet可以通过列索引(从1开始计数)来获取值,和通过列名来获取是等价的。
String name = rs.getString(1);//获取第一列的值
int age = rs.getInt(2);//获取第二列的值
总结
JDBC是访问关系型数据库的标准API。ResultSet是一种行数据的表示形式,它封装了查询结果并提供了一系列方法供我们操作。在使用ResultSet时,我们可以使用next()方法或者forEach()方法遍历结果集。ResultSet也提供了get*()方法来获取结果集中某列的值,还可以通过列索引来获取结果集的值。