我正在考虑将 jOOQ 用作类型安全、独立于 DB 方言的 SQL 生成器,因为我需要在较大的应用程序中动态创建一个小型数据库 DDL 脚本和大量 INSERT 和 UPDATE 语句。然后,我们提供文件作为下载。
我已经在 MySQL 中手动创建了初始数据库模式并生成了 jOOQ 类来使用它。目前,JOOQ 用于生成一堆插入到空的 MySql 模式中)。这工作正常。
我想为用户提供选择不同的数据库方案以导出到:、、、,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);
}
当然,我可以为每个 RDBMS 手动重新创建基本模式,但这很乏味、容易出错并且似乎是多余的:难道没有一种聪明的方法可以使用我用 MySQL DB 模式创建的 jOOQ 生成的元模型来生成其他 SQL 方言的架构?