【问题标题】:Generate DDL using jooq by using schema and table name通过使用模式和表名使用 jooq 生成 DDL
【发布时间】:2019-08-22 16:08:50
【问题描述】:

我想为任何数据库使用模式和表名生成 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;
}

这里使用了生成对象的模式名和表名,但我想将这两个作为输入而不生成对象

【问题讨论】:

  • 试图理解您的要求,您实际上想要一个与数据库无关的 sqlite 转储命令(只是模式,而不是值)的程序等效项?

标签: java sql jooq


【解决方案1】:

您可以通过DSLContext.meta() 从您的JDBC 连接访问实时元信息,按您感兴趣的模式和表进行过滤,然后将其传递给ddl() 方法。请注意,org.jooq.Meta 引用的元信息比生成的代码略少,因此您的 DDL 可能无法准确反映原始模型。

【讨论】:

  • 感谢回复!...我已经完成了我想要的,使用以下代码 - DSLContext dSLContext = DSL.using(getPostgresqlDataSource().getConnection());查询 ddl = dSLContext.ddl(dSLContext.meta().getTables("banks")); for (查询查询:ddl.queries()) { System.out.println(query); }
  • 我无法使用 oracle 数据库检索 DDL,我曾尝试使用相同的代码对 postgres 数据库进行尝试。
  • @neha:你介意问一个新问题吗?它可能会比 cmets 工作得更好。如果您认为自己发现了错误,也可以在这里报告:github.com/jOOQ/jOOQ/issues/new
  • 当然 Lukas,我已经提到了我在 Oracle 数据库中遇到的问题,github.com/jOOQ/jOOQ/issues/8480
猜你喜欢
  • 2017-08-02
  • 2020-07-26
  • 1970-01-01
  • 2022-01-12
  • 2017-06-09
  • 2012-08-23
  • 1970-01-01
  • 2015-11-12
  • 2010-12-05
相关资源
最近更新 更多