【问题标题】:Accessing H2 database schema访问 H2 数据库模式
【发布时间】:2012-08-17 11:00:27
【问题描述】:

我目前正在使用jOOQ 访问java 中的嵌入式H2 数据库以生成表类等。我目前可以执行查询,例如

create.select().from(TEST).fetch()

在我的代码中,返回结果等

但是我无法查询信息架构。我可以使用 H2 控制台正常访问它,并且为给定的 information_schema 表创建视图工作正常。我的问题是我应该如何访问 information_schema,例如执行查询,例如

SELECT * FROM INFORMATION_SCHEMA.TABLES

在我的 java 代码中?我是否必须创建一个视图,是否可以通过 jooq-meta 或其他方式访问架构,或者我是否需要在 jooq-codegen 使用的属性文件中添加一些内容(information_schema 不是在生成的表类中创建的) ?还是别的什么?


编辑: 这是我第一次尝试使用 jooq,并且来自 MySQL 背景。我有效地尝试实现的是能够运行一些单元测试以确保与数据库相关的代码正常工作。所以我想访问数据库的元数据(模式)并返回一些东西,而不必知道是否存在任何用户创建的表。

【问题讨论】:

    标签: java schema h2 information-schema jooq


    【解决方案1】:

    您可以像任何其他模式一样为INFORMATION_SCHEMA 生成类。事实上,jOOQ-meta 包含一些对数据库模式进行逆向工程所需的类。

    manual's section about advanced code generation properties 提到了如何配置代码生成器以加载多个“输入模式”:

    <database>
      <schemata>
        <schema>
          <inputSchema>...</inputSchema>
        </schema>
        [ <schema>...</schema> ... ]
      </schemata>
    </database>
    

    【讨论】:

    • 好的,我修改了我的属性文件以加载多个模式,并且代码生成成功地为它们创建了适当的类。但是,当运行针对第二个模式的查询时,会发生 SQL table not found 错误(即使使用适当的工厂)。到目前为止,如果我使用 factory.use() 更改默认模式,我只能让查询工作。这听起来是对的还是我没有抓住重点?
    • @user1615803:你能否再问一个问题来展示你现在拥有的东西?这里的这个是关于为INFORMATION_SCHEMA 生成代码的。另一个是关于查询INFORMATION_SCHEMA。对于这个问题的未来访问者,可能更容易了解正在发生的事情
    • 感谢您的帮助。我已经提交了一个新的question
    猜你喜欢
    • 2023-04-04
    • 2020-06-14
    • 2011-07-01
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    相关资源
    最近更新 更多