net.ucanaccess.triggers.TriggerException:表不存在。 :Z_2015_02_24

Posted

技术标签:

【中文标题】net.ucanaccess.triggers.TriggerException:表不存在。 :Z_2015_02_24【英文标题】:net.ucanaccess.triggers.TriggerException: Table does not exists. :Z_2015_02_24 【发布时间】:2015-02-24 15:13:09 【问题描述】:

我在通过 UCanAccess 向表中插入记录时遇到问题。 我的插入看起来像这样:

INSERT INTO [2015_02_24_15_52_29_926_test_schema] ( ... )

插入将由标准java.sql.Statement 触发。

UCanAccess 在内部转换 sql。结果如下:

INSERT INTO Z_2015_02_24_15_52_29_926_test_schema (...)

UCanAccess 为什么要在表名中添加“Z”?

我调试了代码,发现更改发生在 UCanAccess 提供的 SQLConverter 类中的 SQLConverter.escape(sql) 中。

【问题讨论】:

【参考方案1】:

UCanAccess 旨在支持像 2015_02_24_15_52_29_926_test_schema 这样的表名。为此,它需要使用内部命名重映射。 在非常旧的版本中可能有一些关于它的错误,但是像这样的 INSERT insert into [2015_02_24_15_52_29_926_test_schema] values(1,'f') 效果很好 在最新版本中(我刚刚尝试过 2.0.9.2 和 2.0.9.3)。

【讨论】:

感谢您的回复。我使用最新版本,但它对我来说不起作用。尽管如此,在表名前加上“TBL_”对我来说是一个令人满意的解决方案。 这很奇怪,我还针对这个具体案例开发了一些junit测试,并且都成功运行。无论如何,如果你能改进命名,那就去做吧。【参考方案2】:

UCanAccess 不允许在表名开头使用数字。

只需使用TBL_2015... 作为您的表名。

【讨论】:

以上是关于net.ucanaccess.triggers.TriggerException:表不存在。 :Z_2015_02_24的主要内容,如果未能解决你的问题,请参考以下文章