2

我正在考虑将 jOOQ 用作类型安全、独立于 DB 方言的 SQL 生成器,因为我需要在较大的应用程序中动态创建一个小型数据库 DDL 脚本和大量 INSERT 和 UPDATE 语句。然后,我们提供文件作为下载。

我已经在 MySQL 中手动创建了初始数据库模式并生成了 jOOQ 类来使用它。目前,JOOQ 用于生成一堆插入到空的 MySql 模式中)。这工作正常。

我想为用户提供选择不同的数据库方案以导出到:、、、,sqlite如果许可证是商业的MySQL/MariaPostgres那么可能AccessOracle等等。例如

    List<DSLContext> dbdialects = new ArrayList<DSLContext>();
    dbdialects.add(using(SQLDialect.MYSQL));
    dbdialects.add(using(SQLDialect.FIREBIRD));
    dbdialects.add(using(SQLDialect.SQLITE));
    //other dialects including MS Access available via commercial license.

    for (DSLContext create : dbdialects) {

        String dialect = create.configuration().dialect().toString();
        String sql = create.insertInto(EMPLOYEES)
                .set(EMPLOYEES.FIRST_NAME, fn)
                .set(EMPLOYEES.LAST_NAME, ln)
                .getSQL(ParamType.INLINED);
        System.out.println(dialect + "\t" + sql);
    }

当然,我可以为每个 RDBMS 手动重新创建基本模式,但这很乏味、容易出错并且似乎是多余的:难道没有一种聪明的方法可以使用我用 MySQL DB 模式创建的 jOOQ 生成的元模型来生成其他 SQL 方言的架构?

4

1 回答 1

0

此功能已通过DSLContext.ddl()方法提供,这些方法已在 jOOQ 3.8 中添加#3160

为了生成和执行 DDL 查询(CREATE TABLE,ALTER TABLE ADD CONSTRAINT等),只需将表名或模式名传递给ddl()方法,如下所示:

Queries queries = DSL.using(configuration).ddl(EMPLOYEES);
for (Query query : queries)
    query.execute();
于 2014-09-29T17:10:05.330 回答