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的主要内容,如果未能解决你的问题,请参考以下文章