【问题标题】:How to check if a table exists in jOOQ?如何检查 jOOQ 中是否存在表?
【发布时间】:2014-09-04 16:16:29
【问题描述】:

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

我试过这个检查:

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

但这会返回一个静态的表列表(不查询数据库中的架构)。

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

【问题讨论】:

    标签: java sql h2 jooq


    【解决方案1】:

    你不能使用:

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

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

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

    如果您经常运行此测试,这当然不是检查是否有任何表的一种非常高效的方法,因为它会将 所有 表提取到内存中只是为了运行 isEmpty() 检查.我建议改为发出实际查询:

    int numberOfTables =
    DSL.using(configuration)
       .select(count())
       .from("information_schema.tables")
       .where("table_schema = 'PUBLIC'")
       .fetchOne(0, int.class);
    

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

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

    【讨论】:

    • 啊,谢谢。你有没有机会添加一个高性能的快捷方式?我不想编写特定于数据库引擎的代码;我使用 jOOQ 的主要原因之一。
    • jOOQ 用户尚未多次提及该用例,尽管我认为许多用户可能拥有它。我非常乐意将功能请求放在路线图上,但让我们先在 user group 上讨论它们。
    猜你喜欢
    • 1970-01-01
    • 2017-05-31
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 2019-11-25
    • 2013-04-07
    相关资源
    最近更新 更多