Ucanaccess JDBC 驱动程序 - 内存=false 设置的内存不足错误
Posted
技术标签:
【中文标题】Ucanaccess JDBC 驱动程序 - 内存=false 设置的内存不足错误【英文标题】:Ucanaccess JDBC Driver - outofmemory error with memory=false setting 【发布时间】:2016-05-04 21:46:48 【问题描述】:我正在使用 jackcess-2.1.1。我已经设置了 memory=false 参数,但仍然面临 outOfmemory 错误。它发生在处理 1.8GB 大小的 MDB 文件时。 JVM 内存参数设置为最大 1GB。如果我将最大大小更改为 2GB,则它可以正常工作。 但是根据 ucanaccess 门户上的说明,当设置了 memory=false 时,不应该使用 In-Memory 并且 JVM Memory Args 不应该改变任何东西。
非常感谢任何回应。找出下面的错误。
java.lang.OutOfMemoryError: Java heap space
at com.healthmarketscience.jackcess.impl.LongValueColumnImpl.readLongValue(LongValueColumnImpl.java:136)
at com.healthmarketscience.jackcess.impl.LongValueColumnImpl.read(LongValueColumnImpl.java:90)
at com.healthmarketscience.jackcess.impl.ColumnImpl.read(ColumnImpl.java:586)
at com.healthmarketscience.jackcess.impl.TableImpl.getRowColumn(TableImpl.java:767)
at com.healthmarketscience.jackcess.impl.TableImpl.getRow(TableImpl.java:673)
at com.healthmarketscience.jackcess.impl.TableImpl.getRow(TableImpl.java:652)
at com.healthmarketscience.jackcess.impl.CursorImpl.getCurrentRow(CursorImpl.java:699)
at com.healthmarketscience.jackcess.impl.CursorImpl$BaseIterator.next(CursorImpl.java:822)
at com.healthmarketscience.jackcess.impl.CursorImpl$BaseIterator.next(CursorImpl.java:1)
at net.ucanaccess.converters.LoadJet$TablesLoader.loadTableData(LoadJet.java:829)
at net.ucanaccess.converters.LoadJet$TablesLoader.loadTablesData(LoadJet.java:997)
at net.ucanaccess.converters.LoadJet$TablesLoader.loadTables(LoadJet.java:1041)
at net.ucanaccess.converters.LoadJet$TablesLoader.access$2900(LoadJet.java:273)
at net.ucanaccess.converters.LoadJet.loadDB(LoadJet.java:1479)
at net.ucanaccess.jdbc.UcanaccessDriver.connect(UcanaccessDriver.java:243)
at java.sql.DriverManager.getConnection(DriverManager.java:571)
at java.sql.DriverManager.getConnection(DriverManager.java:187)
at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:153)
at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriver(DriverManagerDataSource.java:144)
at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnectionFromDriver(AbstractDriverBasedDataSource.java:155)
at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnection(AbstractDriverBasedDataSource.java:120)
at org.hibernate.service.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:141)
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcServicesImpl.java:242)
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:117)
at org.hibernate.service.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:76)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:160)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:132)
at org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1825)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1783)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1868)
at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:372)
【问题讨论】:
【参考方案1】:如果我将最大大小更改为 2GB,它可以正常工作。但是根据 ucanaccess 门户上的说明,当设置了 memory=false 时,不应该使用 In-Memory 并且 JVM Memory Args 不应该改变任何东西。
这并不完全正确。 memory=false
告诉 UCanAccess 不要将 HSQLDB 支持数据库 tables 保存在内存中,但是基于磁盘的 HSQLDB 数据库仍然会消耗 一些 内存,并且还有很多其他的东西UCanAccess(和 Jackcess)也必须保存在内存中。 memory=false
的内存需求将大大低于 memory=true
。
【讨论】:
以上是关于Ucanaccess JDBC 驱动程序 - 内存=false 设置的内存不足错误的主要内容,如果未能解决你的问题,请参考以下文章
找不到适合 jdbc:ucanaccess://C:\Users\Asim Iqbal\Documents\PersonInfo.accdb 的驱动程序
java.lang.ClassNotFoundException:net.ucanaccess.jdbc.ucanaccessDriver
java.Sql.SQLException,无法加载类 net.ucanaccess.jdbc.UcanaccessDriver
Android Studio:net.ucanaccess.jdbc.UcanaccessSQLException:错误文件不存在
Java 错误 - net.ucanaccess.jdbc.UcanaccessSQLException:格式错误的字符串:'