有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从数据库中获取数据作为块以节省内存

我的问题与JDBC查询有关,在JDBC查询中,表中的记录数量很大。最终目标是以流式方式从数据库中获取数据,通过流式方式逐块获取数据

这可以通过使用关键字(如LIMIT、OFFSET)创建多个SQL语句来实现。但在这种情况下,将有多个DB调用,这将花费更多的时间。 有没有一种方法可以让您不将整个结果集加载到内存中&;不需要额外的数据库调用就可以获取数据块

谢谢


共 (1) 个答案

  1. # 1 楼答案

    首先,如果您从数据库中获取数据块,那么您将执行多个数据库调用。您将不会执行那么多查询

    第二,是的,这是可能的。有一个DB概念称为“游标”

    Connection cn = //..
    // Very important - JDBC default is to commit after every statement
    // which will cause DB to close the cursor
    cn.setAutoCommit(false);
    Statement st = cn.prepareStatement("SELECT * FROM TBL_FOO");
    
    // Cache 50 rows at the client at a time
    st.setFetchSize(50);
    ResultSet rs = st.executeQuery();
    while (rs.next()) {
        // Move the cursor position forward - moving past cached rows triggers another fetch
    }
    rs.close();
    st.close();
    

    注意,数据库在执行查询时将获取所有行,结果集将占用DB内存,直到您关闭光标。请记住,数据库是一个共享资源