Я рассматриваю использование jOOQ как типичного, независимого от диалекта SQL генератора 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, но это утомительно, подвержено ошибкам и кажется излишним: нет ли разумного способа использовать сгенерированную метамодель из jOOQ, которую я создал с моей схемой DB DB для генерации схема для других диалектов SQL?
Эта функциональность была доступна через методы 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();