使用 org.jooq.Meta 的 jOOQ 3.0 解决方案
在即将到来的 jOOQ 3.0 中,DatabaseMetaData
可以通过新org.jooq.Meta
对象以“jOOQ 方式”访问 JDBC(通过功能请求#1968实现)。该对象提供对这些类型的各种对象的访问:
org.jooq.Catalog
org.jooq.Schema
org.jooq.Table
org.jooq.Field
org.jooq.DataType
这些可以与您生成的类进行比较,例如
MY_SCHEMA.getTables().equals(create.meta().getTables())
使用 JDBC DatabaseMetaData 的 jOOQ 2.x 解决方案
上述解决方案可以手动实现,查询Connection.getMetaData()
. 当然,这将是更多的工作
查询所有表的技巧
另一个简单的解决方案是查询所有生成的表,如下所示:
List<Table<?>> invalidTables = new ArrayList<>();
for (Table<?> table : MY_SCHEMA.getTables()) {
try {
create.selectFrom(table).where(Factory.falseCondition()).fetch();
}
// If table names / column names change, the above query would fail
catch (DataAccessException e) {
invalidTables.add(table);
}
}
这个技巧将允许检测增量是否兼容