`
wsql
  • 浏览: 12034381 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

关于ResultSet.last()方法报错问题的解决

 
阅读更多

今天看到这样的一个文章,感觉写的挺好,就把它拿过来收藏一下,也与大家分享一下。有位朋友在使用ResultSet.last时,遇到了这样的问题java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Unsupported method: ResultSet.last。

在不想再次通过查询数据库得到记录条数的情况下,(如:select count(*) from tableName)我们可能会使用ResultSet.last()方法将游标指向结果集末尾,并使用ResultSet.getRow()方法获取当前行号来取得最大行号。

可能遇到这样的问题:

java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Unsupported method: ResultSet.last

说JDBC不支持这种方法,这是因为Statement对象是专门处理ResultSet记录的API对象,所以它对于所要处理的ResultSet还是有要求的,如果要使用扩展式的游标,那么就要使用以下构造:

Statement = Connection.createStatement(int resultSetType,int resultSetConcurrency)

resultSetType(结果集类型)包括:

ResultSet.TYPE_FORWARD_ONLY 缺省类型。该常量指示光标只能向前移动的 ResultSet 对象的类型。

ResultSet.TYPE_SCROLL_INSENSITIVE 该常量指示可滚动但通常不受 ResultSet 底层数据更改影响的 ResultSet 对象的类型。

ResultSet.TYPE_SCROLL_SENSITIVE 该常量指示可滚动并且通常受 ResultSet 底层数据更改影响的ResultSet 对象的类型。

resultSetConcurrency(并发类型)包括:
ResultSet.CONCUR_READ_ONLY 缺省类型。该常量指示不可以更新的 ResultSet 对象的并发模式。

ResultSet.CONCUR_UPDATABLE 该常量指示可以更新的 ResultSet 对象的并发模式。

了解了以上的构造之后,我们便对Statement进行修改如下:

Connection conn = DBConn.getConnection();

Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,

ResultSet.CONCUR_READ_ONLY);

String sql = "select * from table1"; // 查询表table1中的内容

ResultSet rs = stmt.executeQuery(sql); // 执行sql语句

rs.last(); // 定位光标到最后一条记录

System.out.println(rs.getRow()); // 打印当前,即最后一条记录的行号

分享到:
评论

相关推荐

    javaResultSet常用方法.pdf

    * rs.last():将光标定位到结果集中最后一行 * rs.beforeFirst():将光标定位到结果集中第一行之前 * rs.afterLast():将光标定位到结果集中最后一行之后 3. 更新操作: * rs.insertRow():把插入行加入数据库和...

    java数据库连接ResultSet

    ResultSet 通过一套 get 方法访问当前行中的不同列,例如 getInt、getString、getFloat 等。 在使用 ResultSet 之前,需要先执行 SQL 语句,并将结果存储到 ResultSet 对象中。例如: ```java java.sql.Statement ...

    java resultset常用方法

    - `rs.last()`:将光标定位到结果集的最后一行。 - `rs.beforeFirst()`:将光标定位到结果集的第一行之前。 - `rs.afterLast()`:将光标定位到结果集的最后一行之后。 ##### 2. 测试光标位置的方法 - `rs.isFirst()...

    ResultSet

    例如,`resultSet.getInt(1)`或`resultSet.getString("columnName")`。 4. 遍历结果集:为了完整遍历ResultSet,你需要在while循环中使用next()方法,直到它返回false为止。示例代码如下: ``` while (resultSet....

    java.sql.SQLException: 结果集已耗尽

    检查JSP中的SQL查询和对ResultSet的操作是否符合上述规范,是解决问题的关键。 为了修复这个问题,首先要确保正确处理ResultSet。在遍历完所有数据后,务必调用`resultSet.close()`来释放资源。同时,确保在查询前...

    java仓库管理

    supplierData.put(Integer.valueOf(resultSet.getInt("sup_id")), resultSet.getString("sup_name")); } catch (Exception e) { e.printStackTrace(); } return supplierData;//返回映射关系 } public ...

    ResultSet常用方法

    ResultSet是Java数据库连接(JDBC)...在创建Statement或PreparedStatement对象时,通过设置适当的参数(如`ResultSet.TYPE_SCROLL_INSENSITIVE`,`ResultSet.CONCUR_UPDATABLE`等)来创建可滚动和可更新的ResultSet。

    采用JDBC进行数据库分页查询

    一次只从数据库中查询最大maxCount条记录 ... PreparedStatement pstat = conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); //最大查询到第几条记录.........

    ResultSet转化为json,json转化为List

    user.setName(resultSet.getString("name")); user.setAge(resultSet.getInt("age")); userList.add(user); } ``` 4. 将List转换为JSON字符串: 使用Jackson的ObjectMapper进行转换: ```java ObjectMapper...

    支持ResultSet的JTable

    - `ResultSetMetaData`:通过`ResultSet.getMetaData()`获取,提供了关于查询结果列的信息,如列名、数据类型等。 - `ResultSet.getString(int columnIndex)`:用于获取指定列的字符串值。 - `ResultSet.getInt(int ...

    只进结果集不支持请求的操作的“解决方法

    例如,可以使用`ResultSet.isBeforeFirst()`、`ResultSet.isAfterLast()`、`ResultSet.isFirst()`、`ResultSet.isLast()`等方法来判断当前状态。 3. **异常处理**:添加适当的异常处理逻辑,确保程序在遇到这类问题...

    bookstore 网上书店源码

    resultSet.getString (5), resultSet.getString (6), resultSet.getString (7), resultSet.getString (8) ); preparedStatement.close (); ConnDB.terminate(); return users; } else { preparedStatement....

    JDBC2.0新功能

    例如,使用`ResultSet.first()`可以移到第一行,`ResultSet.last()`移到最后一行,`ResultSet.absolute(int row)`则可以直接移动到指定的行号。此外,`ResultSet.previous()`允许向后移动一行,而`ResultSet....

    java sql ResultSet 之getRow()用法说明

    rs.last(); int rowCount = rs.getRow(); ``` 这样,我们就可以获取结果集的总行数。 三、Stream 流中的 count() 方法 在 Java 8 中,引入了 Stream 流的概念,可以用来处理大量数据。Stream 流中的 count() 方法...

    关于ResultSet的相关知识

    - 在对ResultSet进行任何更新操作之前,最好先调用`rsConcurrency = ResultSet.CONCUR_UPDATABLE`设置并发模式,以启用更新功能。 - 不是所有的数据库驱动都支持插入行功能,因此在设计应用程序时需要考虑兼容性问题...

    Java ResultSet导出大数据.docx

    Java的PreparedStatement接口允许我们设置游标类型和获取结果集的方式,例如设置为ResultSet.TYPE_FORWARD_ONLY和ResultSet.CONCUR_READ_ONLY,这可以防止数据被一次性加载到内存。同时,通过调用setFetchSize方法...

    ResultSet对象获取数据的各种方法

    ### ResultSet对象获取数据的各种方法 在Java编程语言中,`ResultSet`对象是处理数据库查询结果的核心组件之一。它充当一个可滚动的、可更新的数据表,用于存储从数据库执行SQL语句后返回的结果集。本文将详细介绍...

    ResultSet剖析

    - `resultSetType`:设置`ResultSet`的滚动模式,`ResultSet.TYPE_FORWARD_ONLY`表示仅支持前向滚动,`ResultSet.TYPE_SCROLL_INSENSITIVE`和`ResultSet.TYPE_SCROLL_SENSITIVE`则允许双向滚动,区别在于后者对数据...

Global site tag (gtag.js) - Google Analytics