java - 在 Derby 和 Hsqldb 中转义表名和字段名的问题

标签 java orm hsqldb derby ormlite

我的 ORMLite package 有问题.当我为表生成模式时,我认为转义所有实体名称是一个好习惯。这将保护某些 Java 类或字段名称不成为 SQL 保留字:

CREATE TABLE "footable" ("stuff" VARCHAR(255))

我现在正在添加“原始”查询支持,以便 ORMLite 可以帮助用户执行他们自己的查询。但是,我发现在 Derby 和 Hsqldb 中,如果不转义,则不能使用实体名称。例如,以下查询:

SELECT * FROM footable

生成以下错误:

Derby: ERROR 42X05: Table/View 'FOOTABLE' does not exist.
Hsqldb: Table not found in statement [select * from footable]

如果选择表也被转义为 "footable",它工作正常。 ORMLite 支持的其他数据库在有或没有转义的情况下都可以正常工作:MySQL、Postgres、Microsoft SQL Server、H2 和 Sqlite。

是否有更好的方法来转义 Derby 和 Hsqldb 中的保留字?关于如何以便携方式执行此操作的其他想法?

谢谢。

最佳答案

非常感谢 Bryan 带领我走上这条路,尽管他的回答不太正确。

事实证明,因为我将数据库创建为 "footable" 然后,正如 Bryan 所说,它将区分大小写。但是,当我在 footable(没有 引号)上进行选择时,Derby 和 Hsqldb 将其提升为全部大写,所以我实际上在做:

SELECT * FROM FOOTABLE

这不是关于在没有引号的情况下不区分大小写(这会起作用),而是关于在没有引号的情况下将实体名称提升为全部大写,然后按大小写进行匹配。我认为这里有一个错误......

无论如何,我已经更改了我的 Derby 和 Hsqldb 以将 ORMLite 中的所有实体名称大写一切正常。丑陋的海事组织,但工作。

关于java - 在 Derby 和 Hsqldb 中转义表名和字段名的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3121128/

相关文章:

sql - 如何从HSQLDB中的序列生成主键

java - HSQLDB 唯一约束导致 java.lang.NullPointerException

java - 为什么JVM不执行代码?

java - Apache Tomcat 是Web服务器还是应用服务器

mysql - 删除实体而不删除指向它的外键链接

java - 在不必获取关联的情况下持久化一个新对象

hibernate - 在 Hibernate 中为 DB2 和 HSQLDB 映射名为 "group"的表

java - 与其他方法相比,对于给定情况有什么差异?

java - Android - 将日期格式化为 "Day, Month dd, yyyy"

java - 如何序列化一组枚举?