java resultset获取列数_Java语言如何获取ResultSet的行数和列数

ResultSet接口表示在数据库的数据表中查询的结果集,ResultSet

对象具有指向其当前数据行的指针。最初,指针被置于第一行之前。

Java没有提供直接返回ResultSet行数的函数(或方法)。如果想知道ResultSet的行数,有以下三个办法可以解决:

1. 用sql语句中的count函数,然后从ResultSet里获取第一行的数字:

try {

ResultSet resultSet = statement.executeQuery("select count(1) as

nRrow from tableName");//使用sql的count函数

resultSet.next();//移动到第一行

int rowCount = resultSet.getInt("rowCount");//获取行数值

} catch (Exception e) {

e.printStackTrace();

}

这种方法不用遍历整个数据集,节省了运算时间,但是,此方法只能用于获取数据表的行数,不能获取表中的具体数据。所以如果只是想知道数据表的行数,此方法非常适合。

2. 遍历Resultset,用一个变量累加记录行数。代码如下:

int nRow = 0;

try {

ResultSet resultSet = statement.executeQuery("select * from

tableName");//使用select语句查询数据表

while(resultSet.next()){//遍历

nRow++;

}

} catch (SQLException e1) {

e1.printStackTrace();

}

next 函数将指针移动到下一行;因为该方法在 ResultSet 对象中没有下一行时返回

false,所以可以在 while 循环中使用它来迭代结果集。

这种方法需要遍历整个结果集,在遍历过程中可以获取数据;但是在遍历完之后,不能再使用结果集了,因为这时候指针已经移动到结果集的外面了,不能返回到结果集的初始处。

3. 在创建Statement时加入参数

知道了第二种方法中问题的原因,我们就知道如何更好地解决这个问题了。第二种方法的问题在于返回的结果集中的指针不能自由移动,幸好java为

我们提供了选择,可以让我们创建指针可以自由移动的结果集,所需要做的只有一件事,就是在创建Statement的时候,加上两个参数:在创建Statement对象的时候加入参数,可以使ResultSet能够随意滚动和更新,语句如下:

Statement stmt = conn.createStatement(type, concurrency);

其中,type表示ResuleSet的类型,取值和含义如下:

ResultSet.TYPE_FORWARD_ONLY :结果集不能滚动,这是默认值;

ResultSet.TYPE_SCROLL_INSENSITIVE:结果集可以滚动,但ResuleSet对数据库中发送的数据改变不敏感;

ResultSet.TYPE_SCROLL_SENSITIVE :结果集可以滚动,并且ResuleSet对数据库中发生的改变敏感

当使用TYPE_SCROLL_INSENSITIVE或者TYPE_SCROLL_SENSITIVE来创建Statement对象时,可以使用ResultSet 的first()、last()、beforeFirst()、afterLast()、relative()和absolute()等方法,以便在结果集中随意前后移动。

concurrency表示是否可以使用ResuleSet来更新数据库,取值和含义如下:

ResultSet.CONCUR_READ_ONLY :只读结果集,不能用于更新数据库;

ResultSet.CONCUR_UPDATABLE :可更新结果集,可以用于更新数据库。

注意:如果结果集来自于合并查询,即查询结果来自多个数据表,即使使用了CONCUR_UPDATABLE参数创建Statement,得到的结果集也不一定是可更新的。可以使用ResuleSet类的getConcurrency()函数来确定是否为可更新的的结果集。

如果结果集是可更新的,那么可使用ResultSet的

updateRow()、insertRow()、moveToCurrentRow()、deleteRow()和cancelRowUpdates() 等函数对数据库进行更新。

加入参数后代码如下:

try {

//Statement statement = connection.createStatement();

Statement statement =

connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

ResultSet resultSet = statement.executeQuery("select * from " +

tableName);

} catch (Exception e) {

e.printStackTrace();

}

这样获得的结果集,指针就可以在其中自由移动。然后,就可以用如下方法获取结果集的行数:

int nRow = 0;

try {

resultSet.last();

nRow = resultSet.getRow();

} catch (Exception e) {

e.printStackTrace();

}

其中resultSet.last()就是将指针移动到结果集的最后一条记录;然后用resultSet.getRow()获取指针当前所在的行号。

如果接下来你还要使用结果集,不要忘记将指针移到第一行:

resultSet.first();

可以通过

resultSet.getMetaData().getColumnCount()获取结果集的列数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值