ORMLite和Oracle - 区分大小写的列名称

时间:2013-03-07 12:07:38

标签: oracle ormlite

我刚刚开始使用ORMLite,并在家中使用MySQL进行实验。现在我决定尝试在Oracle上使用它,但是已经注意到列名称区分大小写的问题。

使用TableUtils.createTableIfNotExists()时,它似乎生成CREATE语句,用双引号将表和列名称包装起来。例如:

  

CREATE TABLE“T_SUBURB”(“id”NUMERIC,“description”VARCHAR2(255)   NOT NULL,“gnaf”VARCHAR2(255),PRIMARY KEY(“id”))

这意味着当我尝试在Oracle SQL Developer中查询数据库时,我必须使用双引号来指定表名和列名。使用MySQL时似乎不会发生这种情况。

我必须承认我是一个SQL新手,但是在尝试查询时,将每个表或列名称用双引号括起来似乎并不自然。查看OracleDatabaseType实现,似乎在本例中有意地引用了实体名称。

有人知道关闭这种行为的方法吗?

我目前正在从maven-central和Oracle 11g运行4.43版。欢呼声。

1 个答案:

答案 0 :(得分:1)

  

使用TableUtils.createTableIfNotExists()时,它似乎生成CREATE语句,用双引号将表名和列名包装。

这是对的。 ORMLite面临的挑战是它必须防止特殊字符或保留字作为字段和表名。像"index""create"这样的词可能会产生精确的字段名称,但会导致无效的SQL。

但是,根据我对OracleDatabaseType的解读,应该生成大写字段名称:

@Override
public boolean isEntityNamesMustBeUpCase() {
    return true;
}

如果您的字段创建为"description",则表示出错。 DESCRIPTION会改变吗? ORMLite是否生成您的架构并使用Oracle JDBC URI?类似的东西:

jdbc:oracle:...

如果您没有使用类似的JDBC URI,那么ORMLite可能没有使用Oracle数据库类型来创建表。如果您需要强制它使用Oracle,您可以创建

ConnectionSource connectionSource =
    new JdbcConnectionSource(databaseUrl, new OracleDatabaseType());

希望这有帮助。