ucanaccess 奇怪的异常,我无法处理

Posted

技术标签:

【中文标题】ucanaccess 奇怪的异常,我无法处理【英文标题】:ucanaccess weird exception i cannot handle 【发布时间】:2015-07-02 14:54:34 【问题描述】:

我最近开始使用 ucanaccess 来连接访问数据库(显然),直到现在一切正常。 我开始在数据库中插入大约 500,000 行......当我达到大约 400,000 时,程序停止......问题是我看不到异常!我看到了 -

    at com.healthmarketscience.jackcess.impl.UsageMap$ReferenceHandler.createNewUsageMapPage(UsageMap.java:763)
at com.healthmarketscience.jackcess.impl.UsageMap$ReferenceHandler.addOrRemovePageNumber(UsageMap.java:747)
at com.healthmarketscience.jackcess.impl.UsageMap.removePageNumber(UsageMap.java:337)
at com.healthmarketscience.jackcess.impl.PageChannel.allocateNewPage(PageChannel.java:354)
at com.healthmarketscience.jackcess.impl.TempPageHolder.setNewPage(TempPageHolder.java:115)
at com.healthmarketscience.jackcess.impl.UsageMap$ReferenceHandler.createNewUsageMapPage(UsageMap.java:763)
at com.healthmarketscience.jackcess.impl.UsageMap$ReferenceHandler.addOrRemovePageNumber(UsageMap.java:747)
at com.healthmarketscience.jackcess.impl.UsageMap.removePageNumber(UsageMap.java:337)
at com.healthmarketscience.jackcess.impl.PageChannel.allocateNewPage(PageChannel.java:354)
at com.healthmarketscience.jackcess.impl.TempPageHolder.setNewPage(TempPageHolder.java:115)
at com.healthmarketscience.jackcess.impl.UsageMap$ReferenceHandler.createNewUsageMapPage(UsageMap.java:763)
at com.healthmarketscience.jackcess.impl.UsageMap$ReferenceHandler.addOrRemovePageNumber(UsageMap.java:747)
at com.healthmarketscience.jackcess.impl.UsageMap.removePageNumber(UsageMap.java:337)
at com.healthmarketscience.jackcess.impl.PageChannel.allocateNewPage(PageChannel.java:354)
at com.healthmarketscience.jackcess.impl.TempPageHolder.setNewPage(TempPageHolder.java:115)
at com.healthmarketscience.jackcess.impl.UsageMap$ReferenceHandler.createNewUsageMapPage(UsageMap.java:763)
at com.healthmarketscience.jackcess.impl.UsageMap$ReferenceHandler.addOrRemovePageNumber(UsageMap.java:747)
at com.healthmarketscience.jackcess.impl.UsageMap.removePageNumber(UsageMap.java:337)
at com.healthmarketscience.jackcess.impl.PageChannel.allocateNewPage(PageChannel.java:354)
at com.healthmarketscience.jackcess.impl.TempPageHolder.setNewPage(TempPageHolder.java:115)
at com.healthmarketscience.jackcess.impl.UsageMap$ReferenceHandler.createNewUsageMapPage(UsageMap.java:763)
at com.healthmarketscience.jackcess.impl.UsageMap$ReferenceHandler.addOrRemovePageNumber(UsageMap.java:747)
at com.healthmarketscience.jackcess.impl.UsageMap.removePageNumber(UsageMap.java:337)
at com.healthmarketscience.jackcess.impl.PageChannel.allocateNewPage(PageChannel.java:354)
at com.healthmarketscience.jackcess.impl.TempPageHolder.setNewPage(TempPageHolder.java:115)
at com.healthmarketscience.jackcess.impl.UsageMap$ReferenceHandler.createNewUsageMapPage(UsageMap.java:763)

我看不出异常是从哪里开始的! 它已经发生在我身上一次但是在进行“压缩和修复”之后,它又起作用了...... 现在没有了。

有人知道这是怎么回事吗?

【问题讨论】:

它发生在 jackcess 层,所以你应该寻求他们的帮助(我的意思是,提供你拥有的异常堆栈跟踪,它看起来真的像堆栈溢出)。什么是 ucanaccess/jackcess 版本? 在这个异常上稍微摸索了一下,它认为你有一个“非标准”数据库(看起来数据库的内部跟踪没有以预期的方式处理)。这个数据库是如何创建的? 【参考方案1】:

检查以下三件事。

首先,如果您使用任何 IDE,请确保增加日志缓冲区,以便您可以开始此异常。可能不会提供太多帮助,但总比看中间的某个地方要好。

其次,数据库文件大小是多少? Access DB 文件大小有限制,有时会导致此类非常规错误。检查一下。

第三 - 在使用 ucanaccess 更新/插入时,不要打开或尝试对特定数据库执行其他操作。这样做,大多数时候都会导致这个问题。

【讨论】:

以上是关于ucanaccess 奇怪的异常,我无法处理的主要内容,如果未能解决你的问题,请参考以下文章

UCanAccess 数据异常:数值超出范围

之前的junit异常处理

ucanaccess SQL 异常:游标状态无效:已识别游标未打开

ucanaccess :带有空格的意外令牌

Scala控制台:OutOfMemoryError:超出GC开销限制

当 Jackcess 连接正常时,UCanAccess 驱动程序在尝试连接 Access 数据库时抛出异常