Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用不同的SQL方言从JOOQ元模型生成模式_Java_Database_Ddl_Jooq_Dialect - Fatal编程技术网

Java 使用不同的SQL方言从JOOQ元模型生成模式

Java 使用不同的SQL方言从JOOQ元模型生成模式,java,database,ddl,jooq,dialect,Java,Database,Ddl,Jooq,Dialect,我正在考虑使用jOOQ作为一个类型安全、DB方言独立的SQL生成器,因为我需要在一个更大的应用程序中动态创建一个小的数据库DDL脚本和大量的INSERT和UPDATE语句。然后,我们提供文件作为下载 我已经在MySQL中手动创建了初始DB模式,并生成了jOOQ类来使用它。目前,JOOQ用于生成一组插入到空MySql模式中的内容。这个很好用 我想为用户提供不同的DB方案选择,以导出到:sqlite,MySQL/Maria,Postgres,如果许可证是商业许可证,那么可能Access,Oracle

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

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

我想为用户提供不同的DB方案选择,以导出到:
sqlite
MySQL/Maria
Postgres
,如果许可证是商业许可证,那么可能
Access
Oracle

    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);
    }
List dbdiallens=new ArrayList();
添加(使用(sqldialent.MYSQL));
添加(使用(sqldialent.FIREBIRD));
添加(使用(sqldialen.SQLITE));
//其他方言,包括MS Access,可通过商业许可证使用。
for(DSLContext-create:db方言){
字符串方言=create.configuration();
字符串sql=create.insertInto(员工)
.set(EMPLOYEES.FIRST_NAME,fn)
.set(EMPLOYEES.LAST_NAME,ln)
.getSQL(ParamType.INLINED);
System.out.println(方言+“\t”+sql);
}

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

此功能已通过jOOQ 3.8中添加的方法提供

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

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

感谢您的反馈-我们一定会关注这个框架@链轮:太棒了!我很想了解更多关于您有趣的用例的信息。如果您想快速聊天,请与我们联系。最新版本有什么进展吗?@PeterPenzov:是的,这些功能自jOOQ 3.8以来就可用了。我已经更新了答案