【问题标题】:Generating a schema from the JOOQ Metamodel in a different SQLDialect在不同的 SQLDialect 中从 JOOQ 元模型生成模式
【发布时间】:2014-09-26 21:57:01
【问题描述】:

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

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

我想为用户提供选择不同的数据库方案以导出到:sqliteMySQL/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 方言生成架构?

【问题讨论】:

    标签: java database ddl jooq dialect


    【解决方案1】:

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

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

    Queries queries = DSL.using(configuration).ddl(EMPLOYEES);
    for (Query query : queries)
        query.execute();
    

    【讨论】:

    • 感谢您的反馈 - 我们一定会关注这个框架!
    • @sprockets:太好了!我很想了解更多关于您有趣的用例的信息。如果您想快速聊天,请与我们联系。
    • 最新版本有进展吗?
    • @PeterPenzov:是的,这些功能从 jOOQ 3.8 开始可用。我已经更新了答案
    猜你喜欢
    • 2015-05-06
    • 2012-07-01
    • 2016-09-04
    • 1970-01-01
    • 2019-02-16
    • 2017-10-02
    • 2021-12-17
    • 2020-01-07
    • 1970-01-01
    相关资源
    最近更新 更多