确定一个词是否是 Apache Derby 中的保留字

Determine if a word is a reserved word in Apache Derby

有没有办法只转义保留字的列?

例如,我想使用 java 生成以下语句:

create table person(id int, name varchar(255), "year" int);

注意到 "year" 必须转义,因为它是一个保留字?有没有办法判断一个字符串是不是保留字?

我不转义所有列的原因是因为我希望查询看起来像这样:

select id, name, "year" from person

而不是这个:

select "id", "name", "year" from person

从通用JDBC的角度来看,有一种确定关键字的方法,使用SQL:2003关键字列表(需要自己获取)+ DatabaseMetaData.getSQLKeywords()的结果:

Retrieves a comma-separated list of all of this database's SQL keywords that are NOT also SQL:2003 keywords.

然而,这取决于 JDBC 驱动程序中的关键字列表是否完整且是最新的,但情况并非总是如此。我不知道德比是否属于这种情况。如果您正在编写通用软件,最好始终引用以避免麻烦。

计划在 JDBC 4.3 中包含引用对象名称的功能(如果给定一个字符串,它将按原样 return 字符串(无需引用),必要时引用或如果对象名称无效或无法引用,则抛出 SQLException)。这不是最终的 IIRC,然后需要等待驱动程序供应商实施它..