当前位置: 首页 > 知识库问答 >
问题:

java8 用ucanaccess 读取 800M的Access数据库,会卡死,改怎么办?

糜凯泽
2023-11-09

如下图,会在258行一直卡住。数据库数量小不会有问题。感觉是把数据都放到内存里了?
大数据量的access改怎么读取呢
image.png

共有2个答案

南宫凯康
2023-11-09

这个地址是你本地地址?

孟彦
2023-11-09

您好,根据您提供的问题,我可以给出一些建议来解决这个问题。

首先,您提到在读取800M的Access数据库时会出现卡死的情况,这可能是由于内存不足或数据库引擎处理大量数据时的性能问题所导致的。在这种情况下,可以考虑以下几种方法来改善读取性能:

  1. 分批读取数据:不要一次性读取所有数据,而是分批次读取。可以使用Java中的流(Stream)或分页(Pagination)技术来逐批读取数据,以减少内存占用和提高处理速度。
  2. 优化数据库查询:检查数据库查询是否有优化空间。使用索引来加速查询操作,避免使用复杂的查询语句,以减少数据库引擎的处理负担。
  3. 调整数据库连接属性:在UCanAccess中,可以尝试调整数据库连接的属性设置,以改善读取性能。例如,可以尝试调整最大连接数、超时设置等。
  4. 升级硬件资源:如果以上方法仍然无法满足需求,可以考虑升级硬件资源,例如增加内存、使用更快的CPU等。

另外,您提到在读取大量数据时感觉是把数据都放到内存里了。实际上,UCanAccess在读取数据时并不是将所有数据都存储在内存中,而是通过数据库引擎直接读取数据并处理。如果您遇到内存不足的问题,可以尝试使用上述的分批读取数据的方法来减少内存占用。

最后,对于大数据量的Access数据库,如果可能的话,可以考虑将数据迁移到更高效的数据存储格式或使用支持大数据处理的数据库系统(例如MySQL、PostgreSQL等)。这样可以获得更好的性能和扩展性。

希望这些建议能够帮助您解决问题。如果您需要更多的帮助或有其他问题需要解答,请随时向我询问。

 类似资料:
  • 各位老师,我是一个rust新手尝试使用tokio做一些实验。目前碰到一个问题,我模拟了一个客户端client.rs,想要他和服务端server.rs进行通讯。客户端发送一些信息给到服务端,进行处理后再把结果发回来。 目前的代码会出现客户端卡死,用try_read看了一下原因是WouldBlock错误,单发送和单接收都正常。一旦像代码中出现发送后再接收就会出问题。能否有大佬解释一下原因,谢谢。 cl

  • 如何使用UCANAccess创建到加密Access数据库的连接?

  • 问题内容: 我有一个MS-Access数据库,我正在使用JDBC(我认为是JDBC-ODBC桥)在Java中连接到该数据库。我的访问数据库有一些希伯来语值。 当我尝试使用String str = rs.getString(1)(rs是RowSet)读取这些值时,我得到的字符串只是一个问号字符串。 我还有希伯来语中的其他字符串,这些字符串是我在Java代码中使用字符串文字设置的,它们可以正常工作。所

  • 问题内容: 如何使用Python访问Microsoft Access数据库?用SQL吗? 我希望可以在Linux上使用的解决方案,但也可以选择Windows。 我只需要读取权限。 问题答案: 不过,我已经使用PYODBC成功连接到 Windows上 的MS Access数据库。安装很容易,用法也很简单,您只需要设置正确的连接字符串(列表中提供了用于MS Access的连接字符串),然后使用示例。

  • 我想做的是: > mysql-connector-java-5.1.35-bin.jar UCANAccess-2.095.jar Jackcess-2.1.2.jar }

  • 问题内容: 当我尝试使用时会发生异常: 也不显示主键。 问题答案: 对于Access ODBC,我们可以通过pyodbc对象的方法获取“主键”列: