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

时间:2016-01-25 20:49:01

标签: java jdbc derby reserved-words

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

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

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

请注意,“年份”必须被转义,因为它是一个保留字?有没有办法确定字符串是否是保留字?

我不只是逃避所有列的原因是因为我宁愿让查询看起来像这样:

select id, name, "year" from person

而不是:

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

1 个答案:

答案 0 :(得分:2)

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

  

检索所有此数据库的SQL关键字的逗号分隔列表,这些关键字不是SQL:2003关键字。

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

计划在JDBC 4.3中包含引用对象名称的功能(给定一个字符串,它将按原样返回字符串(不需要引用),必要时引用,或者如果对象引发 <?php while($row=$res->fetch_array()): ?> <tr> <td><?= $row['actor_id'] ?></td> <td><a href="?del=<?= $row['actor_id'] ?>" onclick="return confirm('sure to delete !'); " >delete</a></td> </tr> <?php endwhile ?> 名称无效或无法引用)。这不是最终的IIRC,然后需要等待驱动程序供应商实现它..