`
csstome
  • 浏览: 1527086 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

jdbc查询超大数据集内存溢出

阅读更多

今天使用jdbc的PreparedStatement查询语句如下:

 

  1. Class.forName( "com.mysql.jdbc.Driver" );  
  2.         String url = "jdbc:mysql://localhost:3306/translate?characterEncoding=utf8" ;  
  3.         String sql = "select id, title, search_title, content from article" ;  
  4.         Connection conn = DriverManager.getConnection(url, "root" "123456" );  
  5.         PreparedStatement ps = conn.prepareStatement(sql);  
  6.         ResultSet rs = ps.executeQuery();  
  7.         rs.close();  
  8.         ps.close();  
  9.         conn.close();  

总是报这个错误:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
 at com.mysql.jdbc.Buffer.getBytes(Buffer.java:198)
 at com.mysql.jdbc.Buffer.readLenByteArray(Buffer.java:318)
 at com.mysql.jdbc.MysqlIO.extractNativeEncodedColumn(MysqlIO.java:3567)
 at com.mysql.jdbc.MysqlIO.unpackBinaryResultSetRow(MysqlIO.java:3483)
 at com.mysql.jdbc.MysqlIO.nextRow(MysqlIO.java:1391)
 at com.mysql.jdbc.MysqlIO.readSingleRowSet(MysqlIO.java:2369)
 at com.mysql.jdbc.MysqlIO.getResultSet(MysqlIO.java:451)
 at com.mysql.jdbc.MysqlIO.readResultsForQueryOrUpdate(MysqlIO.java:2076)
 at com.mysql.jdbc.MysqlIO.readAllResults(MysqlIO.java:1451)
 at com.mysql.jdbc.ServerPreparedStatement.serverExecute(ServerPreparedStatement.java:1314)
 at com.mysql.jdbc.ServerPreparedStatement.executeInternal(ServerPreparedStatement.java:740)
 at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1467)

但是从网上找到的doc说,默认情况下不会出这个问题的,因为java回自动的优化不会导致内存溢出的。百思不得其解。

后来无意找到一个介绍,这么来做

就是给url连接字符串添加2个属性即可:useCursorFetch=true&defaultFetchSize=100

分享到:
评论
1 楼 isaiahzhong 2012-11-06  
           defaultFetchSize这个意思是说一次性取多少条数据是吗?好像hibernate里面有一个抓取策略,就是用来控制取多少条数据

相关推荐

    如何避免JDBC引起的内存溢出情况

    然而,在处理大数据集时,如果不注意细节,很容易遇到内存溢出的问题。本文将重点讨论如何在MySQL、SQL Server以及Oracle三种不同的数据库环境下,通过合理配置和优化策略来避免内存溢出。 #### 一、理解内存溢出的...

    完美解决因数据库一次查询数据量过大导致的内存溢出问题

    数据库查询是应用程序与数据交互的重要环节,当一次性从数据库中获取的数据量过大时,可能会导致内存溢出(Memory Overflow)问题。内存溢出是程序在申请内存时,无法在分配到足够的内存空间来完成操作,这通常是...

    spark jdbc 读取并发优化

    这种模式在数据量不大时不会造成问题,但在数据量级达到千万甚至亿级别时,效率低下,容易产生内存溢出(OOM)错误。例如,对于千万级别的数据表,执行count操作可能需要等待极长的时间,因此不推荐使用默认的单...

    greenplum_jdbc_5.1.4.zip

    - 注意处理大结果集时的内存管理,避免一次性加载大量数据导致内存溢出。 - 使用JDBC的批处理功能提高批量操作的效率。 6. **常见问题及解决方案** - 连接超时:检查网络状况,或者调整数据库的连接超时设置。 ...

    使用JDBC从数据库中查询数据的方法

    在大数据场景下,可能需要处理大量数据,这时可以使用批处理或分页查询,避免一次性加载所有结果导致内存溢出。JDBC还提供了事务管理功能,保证数据库操作的原子性和一致性。 总的来说,JDBC是Java开发者与数据库...

    JDBC 图片录入mysql库 完整版

    - 对于大数据量的图片,考虑分块读写,避免一次性加载大量数据导致内存溢出。 通过以上介绍,你应该对使用JDBC将图片录入MySQL数据库有了全面的理解。实际开发中,可以根据具体需求和项目规模,选择合适的数据存储...

    jdbc4rdf3x

    标题“jdbc4rdf3x”指的是一个针对RDF3X数据库优化的JDBC驱动程序,它解决了原始版本可能引发的内存溢出问题,并提升了查询性能。让我们深入了解一下这个项目及其涉及的技术。 首先,RDF(Resource Description ...

    jdbc驱动jar包

    ResultSet中的游标允许按需读取数据,避免一次性加载大量结果集导致内存溢出。批处理功能允许一次性发送多条SQL语句,提高执行效率。 10. 错误处理和关闭资源: 使用try-with-resources语句可以自动关闭数据库...

    处理大数据量excel

    1. **读取Excel**:使用Apache POI等库读取Excel文件,可以逐行或按需加载数据,避免一次性加载整个文件导致内存溢出。 2. **预处理数据**:在读取数据后,可能需要进行数据清洗、格式转换等预处理步骤,以符合...

    利用JDBC解决大数据查询的问题

    通过采用流式数据接收方式、启用服务器端游标以及合理设置`FetchSize`值等策略,可以显著提高大数据查询的效率,同时避免内存溢出等问题的发生。这些方法不仅适用于GBase 8a这样的数据库系统,也广泛适用于其他支持...

    效率很高的java jdbc类

    2. **迭代器模式**:提供一个迭代器接口,使得遍历结果集更加灵活且节省内存,避免一次性加载所有数据导致内存溢出。 3. **类型转换**:根据需要自动将数据库中的值转换为适当的Java类型,例如将字符串转换为日期、...

    JDBC使用游标实现分页查询的方法

    游标提供了前后移动查询结果的能力,这对于实现分页查询非常有用,尤其是处理大数据量时,避免一次性加载全部数据导致内存溢出。本篇文章将详细介绍如何利用JDBC和游标实现分页查询,并通过两个示例代码进行解析。 ...

    jdbc资源总结jdbc

    2. 合理设置批处理大小,避免内存溢出。 3. 使用PreparedStatement的占位符,防止SQL注入。 4. 使用连接池(如C3P0、HikariCP)管理数据库连接,提高性能。 5. 适当调整JDBC配置参数,如读取缓冲大小、超时时间等。 ...

    jdbc.rar_jdbc

    如果需要处理大量数据,应考虑使用迭代器或流,以避免内存溢出。 此外,JDBC还提供了事务管理功能,通过Connection对象的`setAutoCommit()`和`commit()`方法可以控制事务的提交和回滚。对于性能优化,可以使用...

    优化JDBC性能的三大技巧.doc

    - 限制查询结果数量:使用LIMIT或ROWNUM等机制,限制返回结果的数量,特别是处理大数据集时,可以显著减少内存占用和处理时间。 - 使用索引和条件过滤:合理设计和使用数据库索引,以及在查询语句中加入适当的过滤...

    读取txt-jdbc导入百万级数据.rar

    4. **批量插入**:对于百万级的数据量,一次性全部插入可能导致内存溢出,因此通常采用批量插入策略。Spring JdbcTemplate支持批量执行SQL语句,可以设置批处理的大小,比如每次提交1000条数据,从而提高性能并降低...

    jdbc.rar_WORKING_jdbc

    5. **结果集处理**:使用while循环和ResultSet的next()方法遍历结果集,避免一次性加载所有数据导致内存溢出。 6. **错误处理**:捕获SQLException并处理,了解不同类型的异常代码和含义。 **最佳实践**: - 使用...

    jdbc_notes

    2. **合理设置批处理大小**:批量处理能减少网络传输,但过大可能导致内存溢出。 3. **关闭自动提交**:默认开启,关闭后手动控制事务,减少数据库开销。 4. **使用连接池**:避免频繁创建和销毁连接。 ### 总结 ...

    hive-jdbc-lib.zip

    8. **分页查询**:虽然Hive SQL本身不支持传统的LIMIT和OFFSET分页,但Hive JDBC允许通过设置fetch size来实现虚拟分页,从而避免一次性加载大量数据导致内存溢出。 9. **事务支持**:Hive早期版本不支持事务,但从...

    weblogic.jdbc.vendor.oracle.OracleResultSet jar包

    在处理存储大字段的数据时,`OracleResultSet`能够更高效、更稳定地工作,避免了内存溢出等问题。 在描述中提到的"解决weblogic数据库连接池存储大字段所需包",意味着`weblogic.jdbc.vendor.oracle....

Global site tag (gtag.js) - Google Analytics