JDBC那些事(二)——查询结果集_ResultSet

时间:2022-06-19 11:51:30

接上一篇,JDBC的查询返回值相对复杂一点,所以单独写。上一篇写到stmt.excuteUpdate(sql);执行结果返回的是int类型的值。此处的sql语句为非查询语句。而如果要执行查询语句则需要使用Statement对象的excuteQuery(sql);我们都知道在cmd或者图形化界面下执行查询语句返回的是一个二维的数据表格。那么如果JDBC需要拿到查询结果数据,就必须遍历表格。

JDBC给执行查询结果定一个了一个返回结果集的类型ResultSet ,在ResultSet中有一个指向行的光标。

JDBC那些事(二)——查询结果集_ResultSet

ResultSet rs = stmt.executeQuery(sql); rs为结果对象集。通过rs.next();进行行(hang)遍历,rs提供了getString(i),getString("a"),(i为第几列,a为对应的列明)两种方式进行列表遍历;所以只要能够获得查询结果集的总列数。通过行列遍历就可以遍历整个查询的结果集。我们可以通过rs.getMetaData().getColumnCount();的方式获取到插叙结果集。这样便可以进行结果集的遍历。遍历核心代码如下:

int count = rs.getMetaData().getColumnCount();
while(rs.next()) {//遍历行,next()方法返回值为Boolean,当存在数据行返回true,反之false
for(int i = 1; i <= count; i++) {//遍历列
System.out.print(rs.getString(i));
if(i < count) {
System.out.print("---");//为数据隔开美观,没实际意义
}
}
System.out.println();
}
这样数据结果集就遍历了。

顺便说一下,完整的JDBC代码连接过程代码有三个对象是需要关闭的,不然后容易引发不可预测的错误。关闭的时候注意下关闭顺序,先定义的后关闭。即:

	if(rs != null) rs.close();
f(stmt != null) stmt.close();
if(con != null) con.close();