今天使用jdbc的PreparedStatement查询语句如下:
-
Class.forName(
"com.mysql.jdbc.Driver"
);
-
String url = "jdbc:mysql://localhost:3306/translate?characterEncoding=utf8"
;
-
String sql = "select id, title, search_title, content from article"
;
-
Connection conn = DriverManager.getConnection(url, "root"
,
"123456"
);
-
PreparedStatement ps = conn.prepareStatement(sql);
-
ResultSet rs = ps.executeQuery();
-
rs.close();
-
ps.close();
-
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
分享到:
相关推荐
然而,在处理大数据集时,如果不注意细节,很容易遇到内存溢出的问题。本文将重点讨论如何在MySQL、SQL Server以及Oracle三种不同的数据库环境下,通过合理配置和优化策略来避免内存溢出。 #### 一、理解内存溢出的...
数据库查询是应用程序与数据交互的重要环节,当一次性从数据库中获取的数据量过大时,可能会导致内存溢出(Memory Overflow)问题。内存溢出是程序在申请内存时,无法在分配到足够的内存空间来完成操作,这通常是...
这种模式在数据量不大时不会造成问题,但在数据量级达到千万甚至亿级别时,效率低下,容易产生内存溢出(OOM)错误。例如,对于千万级别的数据表,执行count操作可能需要等待极长的时间,因此不推荐使用默认的单...
- 注意处理大结果集时的内存管理,避免一次性加载大量数据导致内存溢出。 - 使用JDBC的批处理功能提高批量操作的效率。 6. **常见问题及解决方案** - 连接超时:检查网络状况,或者调整数据库的连接超时设置。 ...
在大数据场景下,可能需要处理大量数据,这时可以使用批处理或分页查询,避免一次性加载所有结果导致内存溢出。JDBC还提供了事务管理功能,保证数据库操作的原子性和一致性。 总的来说,JDBC是Java开发者与数据库...
- 对于大数据量的图片,考虑分块读写,避免一次性加载大量数据导致内存溢出。 通过以上介绍,你应该对使用JDBC将图片录入MySQL数据库有了全面的理解。实际开发中,可以根据具体需求和项目规模,选择合适的数据存储...
标题“jdbc4rdf3x”指的是一个针对RDF3X数据库优化的JDBC驱动程序,它解决了原始版本可能引发的内存溢出问题,并提升了查询性能。让我们深入了解一下这个项目及其涉及的技术。 首先,RDF(Resource Description ...
ResultSet中的游标允许按需读取数据,避免一次性加载大量结果集导致内存溢出。批处理功能允许一次性发送多条SQL语句,提高执行效率。 10. 错误处理和关闭资源: 使用try-with-resources语句可以自动关闭数据库...
1. **读取Excel**:使用Apache POI等库读取Excel文件,可以逐行或按需加载数据,避免一次性加载整个文件导致内存溢出。 2. **预处理数据**:在读取数据后,可能需要进行数据清洗、格式转换等预处理步骤,以符合...
通过采用流式数据接收方式、启用服务器端游标以及合理设置`FetchSize`值等策略,可以显著提高大数据查询的效率,同时避免内存溢出等问题的发生。这些方法不仅适用于GBase 8a这样的数据库系统,也广泛适用于其他支持...
2. **迭代器模式**:提供一个迭代器接口,使得遍历结果集更加灵活且节省内存,避免一次性加载所有数据导致内存溢出。 3. **类型转换**:根据需要自动将数据库中的值转换为适当的Java类型,例如将字符串转换为日期、...
游标提供了前后移动查询结果的能力,这对于实现分页查询非常有用,尤其是处理大数据量时,避免一次性加载全部数据导致内存溢出。本篇文章将详细介绍如何利用JDBC和游标实现分页查询,并通过两个示例代码进行解析。 ...
2. 合理设置批处理大小,避免内存溢出。 3. 使用PreparedStatement的占位符,防止SQL注入。 4. 使用连接池(如C3P0、HikariCP)管理数据库连接,提高性能。 5. 适当调整JDBC配置参数,如读取缓冲大小、超时时间等。 ...
如果需要处理大量数据,应考虑使用迭代器或流,以避免内存溢出。 此外,JDBC还提供了事务管理功能,通过Connection对象的`setAutoCommit()`和`commit()`方法可以控制事务的提交和回滚。对于性能优化,可以使用...
- 限制查询结果数量:使用LIMIT或ROWNUM等机制,限制返回结果的数量,特别是处理大数据集时,可以显著减少内存占用和处理时间。 - 使用索引和条件过滤:合理设计和使用数据库索引,以及在查询语句中加入适当的过滤...
4. **批量插入**:对于百万级的数据量,一次性全部插入可能导致内存溢出,因此通常采用批量插入策略。Spring JdbcTemplate支持批量执行SQL语句,可以设置批处理的大小,比如每次提交1000条数据,从而提高性能并降低...
5. **结果集处理**:使用while循环和ResultSet的next()方法遍历结果集,避免一次性加载所有数据导致内存溢出。 6. **错误处理**:捕获SQLException并处理,了解不同类型的异常代码和含义。 **最佳实践**: - 使用...
2. **合理设置批处理大小**:批量处理能减少网络传输,但过大可能导致内存溢出。 3. **关闭自动提交**:默认开启,关闭后手动控制事务,减少数据库开销。 4. **使用连接池**:避免频繁创建和销毁连接。 ### 总结 ...
8. **分页查询**:虽然Hive SQL本身不支持传统的LIMIT和OFFSET分页,但Hive JDBC允许通过设置fetch size来实现虚拟分页,从而避免一次性加载大量数据导致内存溢出。 9. **事务支持**:Hive早期版本不支持事务,但从...
在处理存储大字段的数据时,`OracleResultSet`能够更高效、更稳定地工作,避免了内存溢出等问题。 在描述中提到的"解决weblogic数据库连接池存储大字段所需包",意味着`weblogic.jdbc.vendor.oracle....