2

是否可以使用 JavaDB/Derby 以小写形式创建表和名称?要检查表是否存在,我正在使用:

ResultSet rs = dbmd.getTables(null, "APP", "user_properties", null);
if (!rs.next()) {/*do something*/};

但是表名'user_properties'必须在目录中匹配大小写。

4

1 回答 1

10

Derby 遵循 ANSI 标准,该标准要求将不带引号的标识符折叠为大写。所以,下面的语句:

create table user_properties
(
   id integer not null
);

将创建一个带有 then name 的表USER_PROPERTIES和一个名为ID.

您可以使用带引号的标识符强制 Derby 存储小写(或实际上混合大小写)名称:

create table "user_properties"
(
   "id" integer not null
);

将创建一个带有 then name 的表user_properties和一个名为id.

当您使用带引号的标识符(又名“分隔标识符”)时,它们会区分大小写,因此必须始终使用双引号引用第二个表。

如果表是使用第二条语句创建的,则该语句select * from user_properties不起作用。必须总是引用它:select * from "user_properties"

使用带引号的标识符通常会造成其价值更多的麻烦。如果您从不引用您的标识符,您可以在调用中安全地使用大写名称getTables()

于 2013-10-03T10:39:35.387 回答