gpt4 book ai didi

java - Jackcess 牌 table 限制?

转载 作者:行者123 更新时间:2023-12-01 09:33:08 27 4
gpt4 key购买 nike

我目前正在尝试解决与其他人编写的程序相关的问题,该程序使用 Jackcess 版本 1.1.8 将信息写入 Access 数据库。在向给定 Access 表添加 400 万行的运行中,出现以下异常:

08/29/2016 06:01:47 | ERROR | java.lang.IndexOutOfBoundsException
at java.nio.Buffer.checkIndex(Unknown Source)
at java.nio.HeapByteBuffer.getInt(Unknown Source)
at com.healthmarketscience.jackcess.ReferenceUsageMap.addOrRemovePageNumber(ReferenceUsageMap.java:82)
at com.healthmarketscience.jackcess.UsageMap.addPageNumber(UsageMap.java:201)
at com.healthmarketscience.jackcess.Table.newDataPage(Table.java:761)
at com.healthmarketscience.jackcess.Table.addRows(Table.java:714)
at com.healthmarketscience.jackcess.Table.addRow(Table.java:660)

从网上看到,目前Jackcess的版本是2.*,那么这个问题是用最新版本就可以解决的,还是有更大的问题,就是400万Access 表的行数过多?或者,是否有一种方法可以通过 Cursor 对象添加行,从而减少内存占用?

最佳答案

如果相关应用程序对您的业务仍然很重要,那么您需要将其更新以使用当前版本的 Jackcess。到目前为止,您已经使用它超过 9 年了(Jackcess 1.1.8 于 2007 年 2 月发布),从那时起事情已经取得了一些进展。

值得注意的是,当前版本的 Jackcess 支持 DatabaseBuilder#setAutoSync(false)这会禁用对数据库文件的逐行刷新更新。 (我在 Jackcess 1.1.8 源代码中搜索了“autosync”,但没有找到匹配项,所以我认为当时不支持它。)

使用 Jackcess 2.1.3 测试插入 100,000 行,setAutoSync(true) (默认)大约需要 200 秒,而使用 setAutoSync(false) 的相同代码花了 8 秒。

4,000,000 行的测试插入 setAutoSync(false)耗时约 220 秒,即 3.5 分钟多一点。根据上面的数字,相同的操作没有setAutoSync(false)完成同样的事情预计需要大约 5,500 秒或 1.5 小时。

关于java - Jackcess 牌 table 限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39232363/

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