JAVA中ResultSet返回值的数据读取方法

JAVA中ResultSet返回值的数据读取方法,第1张

是要把rs的记录 存储在数组中吗?使用一个while循环,把每一行记录获取的对象放到一个ArrayList集合中,然后使用ArrayList的toArray方法转成数组(也可以自己迭代实现)。数组和list转换不清楚的可以百度。

当我们执行数据库查询返回一个ResultSet的时候,很多情况下我们需要知道这个ResultSet的大小,即它的行数和列数。我们知道它的列数可以通过resultSetgetMetaData()getColumnCount()很容易地得到,然而,java API没有提供直接访问ResultSet行数的接口。

这个时候,有三个办法可以解决:

1改用select count语句,然后直接从ResultSet里面获取结果:try{Statement statement = connectioncreateStatement();

ResultSet resultSet = statementexecuteQuery("select count() as rowCount from tableName");

resultSetnext();introwCount = resultSetgetInt("rowCount");}catch(Exception e) {//TODO: handle exception

eprintStackTrace();}但是,我们执行数据库查询不光要知道结果的行数,往往接下来还要用到查询结果。如果用此方法,还需要再执行一次select语句,才能得到想要的结果集,这样,就多了一次数据库查询,大大降低了执行速度。

2遍历Resultset,用一个变量记录行数。代码如下:intcount = 0;try{while(resultSetnext()){

count = count + 1;}}catch(SQLException e1) {//TODO Auto-generated catch block

e1printStackTrace();}这样获取的count值就是结果集的行数。然而,这种方法同第一种方法的问题一样,不能再使用结果集了。因为这时候指针已经移动到结果集的外面了,不再指向任何记录。

3知道了第二种方法中问题的原因,我们就知道如何更好地解决这个问题了。第二种方法的问题在于返回的结果集中的指针不能自由移动,幸好java为我们提供了选择,可以让我们创建指针可以自由移动的结果集,所需要做的只有一件事,就是在创建Statement的时候,加上两个参数:try{//Statement statement = connectioncreateStatement();

Statement statement = connectioncreateStatement(ResultSetTYPE_SCROLL_SENSITIVE,ResultSetCONCUR_UPDATABLE);

ResultSet resultSet = statementexecuteQuery("select from " + tableName);}catch(Exception e) {//TODO: handle exception

eprintStackTrace();}这样获得的结果集,指针就可以在其中自由移动。然后,就可以用如下方法获取结果集的行数:introwCount = 0;try{resultSetlast();

rowCount = resultSetgetRow();}catch(Exception e) {//TODO: handle exception

eprintStackTrace();}其中resultSetlast()就是将指针移动到结果集的最后一条记录;然后用resultSetgetRow()获取指针当前所在的行号(从1开始)

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

resultSetfirst();

既然结果集是可滚动的,当然可以用absolute()方法访问指定行号的记录:

其中row参数可正可负,具体含义查一下ResultSet的absolute()方法就知道了。

获得ResultSet的记录个数:

因为ResultSet没有方法可直接得到记录数,只有另想方法,可采用如下方法:

Statement stmt = dbcreateStatement(ResultSetTYPE_SCROLL_INSENSITIVE, ResultSetCONCUR_READ_ONLY);

ResultSet rs = stmtexecuteQuery(sql);

rslast();//移到最后一行

int count = rsgetRow();

rsbeforeFirst();//移到初始位置

ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法(这些get方法可以访问当前行中的不同列)提供了对这些行中数据的访问。ResultSetnext方法用于移动到ResultSet中的下一行,使下一行成为当前行。

⒈ 行和光标

ResultSet维护指向其当前数据行的光标。每调用一次next方法,光标向下移动一行。

⒉ 列

方法getXXX提供了获取当前行中某列值的途径。在每一行内,可按任何次序获取列值。但为了保证可移植性,应该从左至右获取列值,并且一次性地读取列值。

⒊ 数据类型和转换

对于getXXX方法,JDBC驱动程序试图将基本数据转换成指定Java类型,

⒋ 对非常大的行值使用流

ResultSet可以获取任意大的LONGVARBINARY或LONGVARCHAR数据。方法getBytes和getString将数据返回为大的块(最大为StatementgetMaxFieldSize的返回值)。

⒌ NULL结果值

要确定给定结果值是否是JDBC NULL,必须先读取该列,然后使用ResultSetwasNull

方法检查该次读取是否返回JDBC NULL。

⒍ 可选结果集或多结果集

通常使用executeQuery(它返回单个ResultSet)或executeUpdate(它可用于任何数据库修改语句,并返回更新行数)可执行SQL语句。但有些情况下,应用程序在执行语句之前不知道该语句是否返回结果集。此外,有些已存储过程可能返回几个不同的结果集和/或更新计数。

用户不必关闭ResultSet;当产生它的Statement关闭、重新执行或用于从多结果序列中获取下一个结果时,该ResultSet将被Statement自动关闭。

以上就是关于JAVA中ResultSet返回值的数据读取方法全部的内容,包括:JAVA中ResultSet返回值的数据读取方法、如何获取ResultSet的行数和列数、ResultSet怎么获取数据库中的最后一行记录的第一个字段等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9816545.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存