Java 使用不同的SQL方言从JOOQ元模型生成模式
我正在考虑使用jOOQ作为一个类型安全、DB方言独立的SQL生成器,因为我需要在一个更大的应用程序中动态创建一个小的数据库DDL脚本和大量的INSERT和UPDATE语句。然后,我们提供文件作为下载 我已经在MySQL中手动创建了初始DB模式,并生成了jOOQ类来使用它。目前,JOOQ用于生成一组插入到空MySql模式中的内容。这个很好用 我想为用户提供不同的DB方案选择,以导出到: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
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以来就可用了。我已经更新了答案