Генерировать DDL с помощью jooq, используя схему и имя таблицы

#java #sql #jooq

#java #sql #jooq

Вопрос:

я хочу сгенерировать DDL, используя схему и имя таблицы для любой базы данных.. Ниже приведен код, который я пытаюсь:

 DSLContext dSLContext = DSL.using(getPostgresqlDataSource().getConnection());
Queries ddl = dSLContext.ddl(DefaultCatalog.DEFAULT_CATALOG.WORLD_SEED.ATM);

for (Query query : ddl.queries()) {
    System.out.println(query);
}

private static DataSource getPostgresqlDataSource() { 
    DriverManagerDataSource dataSource = new DriverManagerDataSource();
    dataSource.setDriverClassName("org.postgresql.Driver");
    dataSource.setUrl(System.getenv("WORLD_JDBC_URL"));
    dataSource.setUsername(System.getenv("WORLD_JDBC_USERNAME"));
    dataSource.setPassword(System.getenv("WORLD_JDBC_PASSWORD"));
    return dataSource;
}
  

Здесь имя схемы и имя таблицы были использованы из сгенерированного объекта, но я хочу предоставить эти два в качестве входных данных без создания объектов

Комментарии:

1. Пытаясь понять, о чем вы спрашиваете, вы фактически хотите программный эквивалент команды sqlite dump (только схему, а не значения) независимо от базы данных?

Ответ №1:

Вы могли бы получить доступ к оперативной метаинформации из вашего соединения JDBC через DSLContext.meta() , отфильтровать по схеме и таблицам, которые вас интересуют, и передать это ddl() методу. Обратите внимание, что org.jooq.Meta содержит немного меньше метаинформации, чем сгенерированный код, поэтому ваш DDL может не отражать точную исходную модель.

Комментарии:

1. Спасибо за ответ!.. я сделал то, что хотел, с приведенным ниже кодом — DSLContext dSLContext = DSL.using(getPostgresqlDataSource().getConnection()); Запросы ddl = dSLContext.ddl(dSLContext.meta().getTables(«банки»)); для (Запрос запроса: ddl.queries()) { System.out.println(запрос); }

2. Я не могу получить DDL с помощью базы данных oracle, которую я пробовал для базы данных postgres, используя тот же код..

3. @neha: Не могли бы вы задать новый вопрос? Вероятно, это будет работать намного лучше, чем комментарии. Если вы считаете, что обнаружили ошибку, вы также можете сообщить об этом здесь: github.com/jOOQ/jOOQ/issues/new

4. Конечно, Лукас, я упомянул проблему, с которой я столкнулся для базы данных Oracle, github.com/jOOQ/jOOQ/issues/8480