`
samttsch
  • 浏览: 63822 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

jdbc scrollable resultset

 
阅读更多
jdbc 的resultset有三种cursor类型:
ResultSet.TYPE_FORWARD_ONLY:表示cursor只能向前移动,absolute first last等方法无效。

ResultSet.TYPE_SCROLL_INSENSITIVE:表cursor可以自由移动,但对于修改不敏感

ResultSet.TYPE_SCROLL_SENSITIVE:表cursor可以自由移动,但对于修改敏感


TYPE_SCROLL_INSENSITIVE 如何实现:
jdbc驱动在实现TYPE_SCROLL_INSENSITIVE会将sql语句的结果存在JVM的cache中,(数据库的cursor是不支持absolute之类的操作的),absolute first last等方法其实就是在缓存中来定位而已,由于数据已经全部取到jvm端,此时再去修改数据库,得到的数据是不会改变的。

TYPE_SCROLL_SENSITIVE:与TYPE_SCROLL_INSENSITIVE的区别在于,不是缓存结果,而是缓存rowid,需要用到时再去查询,这样就会造成二次查询
如果未读取数据,将表的row删除,是读取不到的,
Driver driver = new oracle.jdbc.driver.OracleDriver();
        DriverManager.registerDriver(driver);
        Connection conn = DriverManager.getConnection(url,user,password);
        conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
        conn.setAutoCommit(false);
        
        PreparedStatement p1 = conn.prepareStatement("select * from test",ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
        
        Thread.currentThread().sleep(10000);//此时更改数据,或者删除行 查看结果
        ResultSet rs = p1.executeQuery();
        while(rs.next()){
            System.out.println(rs.getInt(1)+" "+rs.getString(2));
        }
        conn.commit();


当如果已经读取到数据,不会再去二次查询
ResultSet rs = p1.executeQuery();
        while(rs.next()){
            System.out.println(rs.getInt(1)+" "+rs.getString(2));
        }
        
        Thread.currentThread().sleep(10000);//修改数据
        
        rs.beforeFirst();
        while(rs.next()){
            System.out.println(rs.getInt(1)+" "+rs.getString(2));
        }
分享到:
评论

相关推荐

    非常好的jdbc3.0

    2. **ResultSet的增强**:提供了scrollable和updatable的ResultSet。Scrollable ResultSet允许开发者前后移动结果集,而不仅仅是按顺序读取。Updatable ResultSet则允许在结果集中直接修改数据,然后通过ResultSet的...

    JDBC与Java数据库程序设计

    - 游标和Scrollable ResultSet - JDBC的并发和多线程支持 - JDBC的元数据查询 - SQL的存储过程调用 - 高级连接池配置 综上所述,JDBC是Java程序员掌握数据库操作的必备技能,其丰富的API和灵活的特性使得Java应用...

    非常全面JDBC资源

    3. **游标**: 使用ResultSet的scrollable功能,允许前后移动结果集,提供更灵活的数据访问。 4. **JDBC与ORM框架的对比**: 虽然JDBC提供直接的数据库操作,但ORM框架如Hibernate、MyBatis简化了开发,提供了对象关系...

    JDBC驱动及JAR包

    - 当处理大量数据时,考虑使用ResultSet的scrollable和updatable特性,或者使用流式ResultSet以降低内存消耗。 - 安全性:避免硬编码数据库凭证,使用加密或连接池管理用户凭据。 7. **JDBC驱动的版本管理**: ...

    sqlserver驱动包:sqljdbc4.jar

    8. **游标和Scrollable结果集**:某些情况下,需要在结果集中前后移动,`ResultSet`的scrollable版本允许这样做。 9. **性能优化**:`sqljdbc4.jar`还包含了一些性能优化特性,例如TDS协议的压缩支持,以及连接池的...

    JDBC API数据库编程实作教材

    - 当处理大量数据时,考虑使用ResultSet的scrollable和updatable特性,或者使用流式ResultSet。 8. **连接池** - 连接池如C3P0、HikariCP、Apache DBCP等,可管理和复用数据库连接,提高系统性能。 - 配置连接池...

    jdbc相关ppt

    3. **结果集处理**:JDBC提供了多种处理结果集的方式,如ForwardOnly、Scrollable、Updatable等,满足不同场景需求。`ResultSet.TYPE_FORWARD_ONLY`是默认模式,只能向前滚动;`ResultSet.TYPE_SCROLL_INSENSITIVE`...

    jdbc示例代码

    2. **滚动游标(Scrollable Result Set)**: 默认情况下,JDBC的结果集是向前只读的。然而,通过设置Statement的类型为ResultSet.TYPE_SCROLL_INSENSITIVE或ResultSet.TYPE_SCROLL_SENSITIVE,我们可以获取一个...

    sqljdbc.jar

    对于大数据量的查询,可以使用ResultSet的scrollable和updatable特性,或者通过流处理减少内存消耗。 `sqljdbc.jar`的源码分析可以帮助开发者更深入地理解其内部工作原理,从而优化性能或解决特定问题。通过查看...

    Hibernate分页查询原理解读

    如果`hibernate.jdbc.use_scrollable_resultset`配置为`true`,则Hibernate会尝试使用JDBC的`ResultSet`接口提供的`absolute`方法直接跳转到指定的位置,从而实现快速定位和分页。 ```java if (session.getFactory...

    JDBC 3.0 高级变成

    - **结果集游标**:向前只读(Forward-Only)与滚动(Scrollable)游标,滚动游标允许双向移动,提供更灵活的数据处理。 5. **元数据获取** - `DatabaseMetaData`接口提供数据库元数据信息,如表结构、列信息、...

    JDBC(ORACLE)

    2. **结果集缓存**:使用ResultSet的scrollable模式和类型,可以实现结果集的缓存,减少对数据库的压力。 3. **连接池**:通过DataSource管理连接,复用数据库连接,减少创建和关闭连接的开销。 总之,JDBC为Java...

    Java语言SQL接口—JDBC编程技术

    - Resultset的scrollable和updatable特性允许对结果集进行滚动和修改。 - PreparedStatement的batchUpdate()方法支持批量操作。 - Connection的prepareCall()用于处理存储过程。 9. JDBC的最佳实践 - 使用...

    JDBC驱动

    5. **结果集类型和并发控制**:根据需求选择合适的ResultSet类型和并发控制,如ForwardOnly、Scrollable,以及ReadOnly、Updatable。 综上所述,JDBC驱动在Java应用与数据库之间的桥梁作用至关重要。理解并正确使用...

    com.microsoft.sqlserver.jdbc.SQLServerException: 只进结果集不支持请求的操作 解决方案

    在数据库连接池配置中,确保JDBC连接的`ResultSet`类型被设置为支持分页操作的类型,如`TYPE_SCROLL_INSENSITIVE`或`TYPE_SCROLL_SENSITIVE`。 ### 总结 在处理数据库操作时,理解不同类型的查询结果集及其适用...

    JDBC的博客源码.rar

    - 使用Resultset的scrollable和fetchSize属性,优化数据读取。 10. **JDBC 4.0及更高版本的新特性**:包括自动注册驱动、NoMoreResults异常、自动关闭资源、新的时间日期类以及更好的错误处理机制等。 通过对博客...

    jdbc高级优化

    可以使用ResultSet的scrollable功能,按需加载数据,或者使用流式处理(ResultSet.FETCH_FORWARD和ResultSet.CONCUR_READ_ONLY),避免一次性加载所有数据。 5. **关闭资源**:每次操作完数据库后,确保正确关闭...

    oracle JDBC 驱动包 10g 9i

    Oracle JDBC驱动支持多种类型的游标,如ForwardOnly、Scrollable等。 - 错误处理:在处理数据库操作时,可能会遇到各种错误。Oracle JDBC驱动提供了`SQLException`类来捕获和处理这些异常。 - 批量处理(Batch ...

    《Java Enterprise 最佳实践》【1】 JDBC最佳实践

    5. **结果集管理**:避免一次性加载大量数据,使用ResultSet的scrollable和forward-only模式,以及fetch size设置,控制内存消耗,提高性能。 6. **异常处理**:妥善处理JDBC异常,避免程序因未捕获的SQLException...

    JAVA100例之实例55 可滚动结果集

    在Java编程中,可滚动结果集(Scrollable ResultSet)是一个重要的数据库操作概念,尤其是在处理大量数据或需要在结果集中进行双向导航时。本实例55着重讲解如何在Java应用程序中创建和使用可滚动的结果集。 Java...

Global site tag (gtag.js) - Google Analytics