1

我刚刚开始使用 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 版。干杯。

4

1 回答 1

1

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

这是正确的。ORMLite面临的挑战是它必须防止特殊字符或保留字作为字段和表名。像"index"or之类的词"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());

希望这可以帮助。

于 2013-03-08T14:08:28.610 回答