【发布时间】:2016-01-25 20:49:00
【问题描述】:
有没有办法只转义保留字的列?
例如,我想使用 java 生成以下语句:
create table person(id int, name varchar(255), "year" int);
注意到“年”必须被转义,因为它是一个保留字?有没有办法判断一个字符串是否是保留字?
我不只是转义所有列的原因是因为我希望查询看起来像这样:
select id, name, "year" from person
而不是这样:
select "id", "name", "year" from person
【问题讨论】:
-
不使用保留字怎么样?例如,
year代表什么?出生年份?如果是这样,为什么不这样称呼它?也让其他人更容易知道它是什么。 -
谢谢安德烈亚斯,“年”只是一个例子。我正在以编程方式生成表格。这些列实际上代表了几十个不同类中的字段。
-
如果您以编程方式生成表及其查询,只需在all表名和列名周围加上引号。没有理由不这样做,这样即使 SQL 标准委员会将来添加新的保留字,您也是安全的。
-
有,
DatabaseMetaData.getSQLKeywords(),但它只包含保留在 SQL:2003 关键字之上的字词(并且仅当驱动程序供应商费心使其保持最新和完整时),所以你会仍然需要有自己的 SQL:2003 关键字列表。 JDBC 4.3 计划在必要时包含元数据函数以引用对象名称。
标签: java jdbc derby reserved-words