gpt4 book ai didi

java - 连接Access数据库时如何避免 "Out Of Memory"错误?

转载 作者:行者123 更新时间:2023-11-30 10:53:31 26 4
gpt4 key购买 nike

我有一个本地 MS Access 数据库,我正在尝试通过 Java 连接到它。我使用 UCanAccess 作为 JDBC 驱动程序,虽然数据库链接到网络驱动器上受密码保护的数据库,但我正在连接的数据库已经过身份验证,并且本身不受密码保护。我的类路径中有所有依赖项。连接时,我不断收到此错误:

java.lang.OutOfMemoryError: Java heap

我启动了 Java VisualVM,事实上,主线程正在耗尽所有 2GB 的分配内存。当我试图从大型 MySQL 数据库中选择大量记录时,这种情况才发生在我身上。我在 Google 上找不到与连接时发生的这种情况相关的任何结果,因为我什至没有尝试查询数据库。

代码很简单:

Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
System.out.println("Initiating connection...");
conn = DriverManager.getConnection("jdbc:ucanaccess://C:/Databases/StoreSalesCurrent.accdb");
System.out.println("Connection established");
conn.close();

知道为什么仅仅尝试建立连接会导致如此大的内存消耗吗?

最佳答案

默认情况下,UCanAccess 在 JVM 生命周期中的第一个连接时将整个数据库加载到内存中。这被选为默认行为,因为典型的用例是针对较小的个人数据库,而不是 GB 大小的数据库。

它将使用适当的连接参数,例如设置 memory=false 和其他相关选项,但启动时间(JVM 生命周期中第一次连接的时间)可能会变得高的。查看UCanAccess website了解更多详情。

关于java - 连接Access数据库时如何避免 "Out Of Memory"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33961721/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com