打开数据库连接后,我想检查数据库是否是新建的。我正在使用H2,如果不存在,则会自动创建数据库。
我试过这个检查:
db.Public.PUBLIC.getTables().isEmpty()
但是返回一个静态表列表(不查询数据库中的模式)。
我可以编写原始SQL来获取表列表,但这将特定于数据库引擎。在jOOQ中有一个通用的替代方案吗?
答案 0 :(得分:4)
你不能使用:
db.Public.PUBLIC.getTables().isEmpty()
因为生成的元信息未连接到数据库。相反,您可能需要查看DSLContext.meta()
。在你的情况下,你只需写:
DSL.using(configuration).meta().getTables().isEmpty();
如果经常运行此测试,那当然不是检查是否存在任何表的高效方法,因为它会将所有表提取到内存中以运行{{1}检查。我建议发出一个实际的查询:
isEmpty()
未来的jOOQ版本(3.11之后)将能够为您提供可在SQL或其他地方使用的实际对象存在谓词: