在Derby和Hsqldb中转义表和字段名称的问题
我的ORMLite包有问题。 当我为表生成模式时,我认为逃避所有实体名称是一个好习惯。 这将保护某些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]
如果select表也被转义为"footable"
它可以正常工作。 ORMLite支持的其他数据库可以在有或没有转义的情况下正常工作:MySQL,Postgres,Microsoft SQL Server,H2和Sqlite。
有没有更好的方法来逃避Derby和Hsqldb中的保留字? 关于如何以便携方式执行此操作的其他想法?
谢谢。
所以对布莱恩的感激之情让我走上了前进的道路,尽管他的回答并不完全正确。
事实certificate,因为我正在创建数据库"footable"
然后,正如布莱恩所说,它将创建区分大小写。 但是,当我选择on footable
( 没有引号)时,Derby和footable
正在将它推广为全部大写,所以我实际上在做:
SELECT * FROM FOOTABLE
它不是在没有引号的情况下不区分大小写(这可能有效),而是在没有引号然后按案例匹配时将实体名称提升为所有大写字母。 我认为这里有一个错误……
在任何情况下,我都改变了我的Derby和Hsqldb来大写ORMLite中的所有实体名称并且事情正在发挥作用。 丑陋的IMO,但工作。
你只需要确保案例匹配。
所以,如果它是:
create table "Footable" ("Stuff" varchar (25))
然后它必须是:
insert into "Footable" ("Stuff") values 'hi mom'
如果表/列名称是双引号,则大小写将保留原样。
如果表/列名称不是双引号,则Derby处理它对case不敏感。
- 以编程方式启动Derby
- 使用setString()从String转换为Clob不起作用
- Apache Derby – java.sql.SQLException:无法启动数据库
- java.lang.ClassNotFoundException:org.apache.derby.jdbc.EmbeddedDriver
- 如何运行sql脚本以便从java代码更新Derby架构?
- BoneCP和Derby – 如何正确关闭
- 如何以小写名称创建表 – JavaDB / Derby?
- java.sql.SQLException:没有为jdbc:derby找到合适的驱动程序:
- 以编程方式设置derby.system.home