详解JDBC之ResultSet对象的使用

一、Statement类

可用于执行SQL语句,不同类型的SQL语句,需要使用不同的方法,执行结果存放于ResultSet
具体如下:

ResultSet  executeQuery(String sql)
//用于执行select语句,返回结果集
int executeUpdate(String sql)
//用于执行insert、delete和update语句,返回int
boolean execute(String sql)
//用于执行create和drop等语句,返回boolean

 

二、ResultSet类

1.next()方法

表示select语句的查询结果集。ResultSet对象具有指向其当前数据行的指针,最初,指针被置于第一行记录之前,通过next()方法可以将指针移动到下一行记录。
next()方法在ResultSet对象没有一行记录时返回false,因此可以在while循环中使用它来遍历结果集,也可以利用该方法判断结果集是否为空。
示例代码如下:

 

//此处省略连接数据库的代码…
Statement stmt =conn.createStatement();
ResultSet rs =stmr.executeQuery(“select * from Test”);
if(rs.next()){
System.out.println(“结果集不为空!”);
}
else{
System.out.println(“结果集为空!”);
}

 

2.ResultSet指针

Java的ResultSet对象,默认是不可更新的,仅有一个向前移动的指针,因此,只能遍历它一次,并且只能按从第一行到最后一行的顺序进行。

如果需要ResultSet指针具有移动和可更新的特性,可以在使用createStatement()方法获取Statement对象时指定一些参数。

 

//实例,获取ResultSet中含有的记录数量。

在已获取ResultSet结果集的情况下,可以使用该对象的last()和getRow()方法取得记录数量。

 

last()方法用于将指针指向最后一行记录。

getRow()方法用于返回当前指针所在的位置。

 

ResultSet默认情况下,只能使用next()方法向前逐行移动指针,不支持last()、first()、
以及absolute()等方法,如果要使用last()、absolute()等方法,必须在由Connection生成
Statement时指定相应的参数,格式如下:

Statement stmt =conn.ctrateStatement(游标类型,记录更新权限);

 

3.createStatement()的参数

游标类型参数有以下几种:

ResultSet.TYPE_FORWORD_ONLY
//指针只可以向前移动
ResultSet.TYPE_SCORLL_INSENSITIVE
//指针可滚动,但是不受其他用户
//对数据库更改的影响
ResultSet.TYPE_SCORLL_SENSITIVE
//指针可滚动,当其它用户更改数据
//库时这个记录也会改变
//记录更新权限有以下几种:

ResultSet.CONCUR_READ_ONLY//只读
ResultSet.CONCUR_UPDATABLE//可更新
createStatement()
//缺省参数等价于:
 

4.获取ResultSet记录数量

代码如下:
//此处省略连接数据库的代码和变量的定义!…

Statement stmt =conn.createStatement(ResultSet.TYPE_SCOLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);

ResultSet rs =stmt.executeQuery(“select * from Test”);

if(rs.last()){
count =rs.getRow();//返回当前指针所在的位置
}

System.out.println(“记录数量为:”+count);
 

注:使用上述方法查询记录数量,在数据量很大时会出现内存溢出异常,因此不推荐使用。
要以使用SQL统计函数获取符合查询条件的记录数量,示例代码如下:

 

 

//此处省略连接数据库的代码和变量的定义!…  

//注:此处假设数据库中第一列数据类型为:自动编号
Statement stmt =conn.createStatement();
ResultSet rs =stmt.executeQuery(“select * from Test”);
if(rs.next()){
count =rs.getInt(1);

}
System.out.println(“记录数量为:”+count);

//或者使用 select count(*) from Test group by id 之类的查询语句