【发布时间】:2016-03-01 21:53:05
【问题描述】:
我有一个本地 MS Access 数据库,我正在尝试通过 Java 连接到它。我使用 UCanAccess 作为 JDBC 驱动程序,虽然数据库链接到网络驱动器上受密码保护的数据库,但我连接的数据库已经过身份验证,并且本身没有密码保护。我的类路径中有所有依赖项。连接时,我不断收到此错误:
java.lang.OutOfMemoryError: Java 堆
我启动了 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();
知道为什么只是尝试建立连接会导致如此大的内存消耗吗?
【问题讨论】:
-
我的女朋友也尝试过同样的事情,虽然她从来没有遇到过这个特殊的错误,但她永远无法让 JDBC 驱动程序与 MS Access 一起工作。她尝试的驱动程序只是为了证明这是可能的概念,而不是被认真使用。此外,在 Java 8 中,她使用的驱动程序不再作为桥接所使用的特定方法工作。但是,我不确定您的代码是否属于这种情况。我的女朋友最终放弃了 MS Access,开始使用 postgresql 数据库。
-
@Taelsin - UCanAccess 是一个纯 Java 解决方案,它不使用 JDBC-ODBC 桥,因此它在 Java 8 下运行良好。
-
@TheDankOG - 尝试将
;memory=false附加到您的连接 URL 中,看看是否有帮助。
标签: java ms-access jdbc ms-access-2007 ucanaccess