如何检查jOOQ中是否存在表?

时间:2014-07-14 16:57:58

标签: java sql h2 jooq

打开数据库连接后,我想检查数据库是否是新建的。我正在使用H2,如果不存在,则会自动创建数据库。

我试过这个检查:

db.Public.PUBLIC.getTables().isEmpty()

但是返回一个静态表列表(不查询数据库中的模式)。

我可以编写原始SQL来获取表列表,但这将特定于数据库引擎。在jOOQ中有一个通用的替代方案吗?

1 个答案:

答案 0 :(得分:4)

你不能使用:

db.Public.PUBLIC.getTables().isEmpty()

因为生成的元信息未连接到数据库。相反,您可能需要查看DSLContext.meta()。在你的情况下,你只需写:

DSL.using(configuration).meta().getTables().isEmpty();

如果经常运行此测试,那当然不是检查是否存在任何表的高效方法,因为它会将所有表提取到内存中以运行{{1}检查。我建议发出一个实际的查询:

isEmpty()

未来的jOOQ版本(3.11之后)将能够为您提供可在SQL或其他地方使用的实际对象存在谓词:

https://github.com/jOOQ/jOOQ/issues/8038