Java UCanAccess 未检测到所有项目

Posted

技术标签:

【中文标题】Java UCanAccess 未检测到所有项目【英文标题】:Java UCanAccess doesn't detect all items 【发布时间】:2014-07-26 19:56:09 【问题描述】:

我有问题。我使用这个查询:

SELECT prodeje.datum, 
       prodeje.prodejce, 
       prodeje.pocet, 
       prodeje.cena, 
       produkty.autor_music, 
       produkty.autor_text, 
       produkty.skladba, 
       produkty.isrc, 
       produkty.cd, 
       produkty.ean 
FROM   prodeje 
       INNER JOIN produkty 
           ON prodeje.id_produktu = produkty.id 

但它不会返回所有项目。应该有 59 个结果,但它会(随机)跳过 9 个结果。当我在 Microsoft Access 中尝试相同的查询时,它起作用了……所以我很绝望。

我正在使用 UCanAccess JDBC 驱动程序。

【问题讨论】:

尝试将INNER JOIN 更改为LEFT JOIN,看看它是否能恢复所有结果。 您能否将包含这两个表的 Access 数据库文件上传到像 wikisend.com 这样的网站,然后在此处的评论中发布下载链接,以便我们尝试重新创建问题? 当然,这里是:wikisend.com/download/392154/data_prodej.mdb 我尝试了 LEFT JOIN,它也不起作用。当我使用旧的 JDBS 驱动程序时没有问题。所以我认为这可能是由 UCanAcces 引起的 哦,我明白了..当我尝试从 produkty 中全选时,它没有.. 缺少这 9 个结果 【参考方案1】:

最后,(也许)鬼被抓住了。 已经报告了这个问题(但不幸的是,没有人向我提供损坏的 mdb): http://sourceforge.net/p/ucanaccess/discussion/help/thread/0b85dea2/ 与 SQL 引擎无关。 此问题的级别低于 UcanAccess(由于 mdb 中的格式错误导致的 IO 问题)。尽管有这些错误,但看起来 Ms Access 可以正常工作,而 Jackcess(UCanAccess 使用的库)却不行。 您的 mdb 版本是 1997 (UCanAccess 部分支持只读),如果您在更高版本中转换它,UCanAccess 一切都可以正常工作。 此外,使用 MS Access“修复和修复”工具也应该可以解决问题。

【讨论】:

+1 我同意这是一个有点损坏的 Access 97 文件的情况。我可以确认,如果在 Access 97 中执行“修复”然后执行“压缩”(在该版本中它们是单独的操作),那么 UCanAccess 将在 [produkty] 表中报告正确的行数。 (UCanAccess 在 Access 97 中只能“看到”修复/压缩之前的 38 行,但之后它可以“看到”所有 54 行。) 由于表元数据与损坏的 mdb/accdb 中的数据未对齐,该问题已在 UCanAccess 2.0.9 中得到解决。

以上是关于Java UCanAccess 未检测到所有项目的主要内容,如果未能解决你的问题,请参考以下文章

Java Spring 项目结构 - 未检测到控制器

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

不使用 UCanAccess 从 Java 8 连接到 Access 数据库

使用 UCanAccess 创建表后,ms 访问未强制执行非空约束

Squirrel SQL - UCANACCESS_HOME 系统变量未定义

使用 UCanAccess 插入 ResultSet 时出现“必须在插入之前设置所有列”错误