当前位置: 首页 > 知识库问答 >
问题:

Jooq指定数据库运行时

赫连越
2023-03-14

对于多个数据库(和数据库服务器),我有完全相同的数据库定义。我如何告诉Jooq使用与我创建的连接到DB的“连接”相同的数据库?

示例(对于MySQL):

  1. jdbc:mysql://localhost:3306/tsm-我的开发数据库(tsm),用于生成代码

所有3个数据库都具有相同的定义、相同的表、索引等。TSM one是我们的应用程序使用的标准。

也许我应该使用DSL。使用(连接、设置)而不是DSL。使用(连接)?这就是手册的意思吗?

如果我只有一个“输入”模式,我必须指定它吗?换句话说,我可以这样做吗:

        Settings settings = new Settings()
                .withRenderMapping(new RenderMapping()
                .withSchemata(
                    new MappedSchema().withOutput(
                            databaseInfo.getProperties().getProperty("database.db"))));

或者我必须这样做:

        Settings settings = new Settings()
                .withRenderMapping(new RenderMapping()
                .withSchemata(
                    new MappedSchema().withInput("TSM")
                                      .withOutput(databaseInfo.getProperties().getProperty("database.db"))));

共有1个答案

柯立果
2023-03-14

我假设您正在使用代码生成。在这种情况下,最简单的方法可能是根本不生成模式,而是使用

<configuration>
  <generator>
    <database>
      <inputSchema>your_codegen_input_schema_here</inputSchema>
      <outputSchemaToDefault>true</outputSchemaToDefault>
    </database>
  </generator>
</configuration>

详见手册:https://www.jooq.org/doc/latest/manual/code-generation/codegen-advanced/codegen-config-database/codegen-database-catalog-and-schema-mapping/

如果您希望使用模式限定保留生成的代码,并在运行时映射内容,那么您的第二次尝试似乎是正确的。将此消息传递给您的配置(即DSL.using()调用):

Settings settings = new Settings()
    .withRenderMapping(new RenderMapping()
        .withSchemata(new MappedSchema()
            .withInput("TSM")
            .withOutput(databaseInfo.getProperties().getProperty("database.db"))));

更多细节可以在这里找到:https://www.jooq.org/doc/latest/manual/sql-building/dsl-context/custom-settings/settings-render-mapping

 类似资料:
  • 使用Jooq,我想在作为函数插入期间指定字段的值。 在SQL Server中,等效查询为:

  • 问题内容: 到目前为止,我已经在Jenkins中看到了与构建过程相关的不同选项和工作。我想知道是否存在创建作业的方法,该作业将连接到数据库并运行脚本,该脚本将执行某些操作。也许Jenkins可以运行脚本文件或仅存储一些要运行的动作。提前致谢。 问题答案: 您有两个主要选择: 使用 执行外壳程序 或 执行Windows批处理命令 构建步骤 使用基于Java的工具,例如liquibase,ant任务,

  • 问题内容: 我们每个午夜从CI运行Junit ans Selenium测试用例。我们正在使用Maven-SQL插件预先填充数据,如下所示。 由于不同用户同时进行构建,我们经常面临数据库僵局。我们认为的解决方案是在运行数据库脚本之前锁定数据库。 我们可以在运行脚本之前锁定数据库访问,然后在运行脚本之后解锁数据库访问吗? 问题答案: 共享数据库进行测试从来都不是一个好主意,想必您知道这一点,这就是为什

  • 我正在创建一个应用程序,对jOOQ的当前状态有点困惑。这是我第一次使用jOOQ处理所有东西,包括CRUD,所以我可能会遗漏一些东西。 我知道DAO和POJO可能会被弃用,但是,我不知道如何在数据库优先的设计中处理这个问题。 我能做的最简单的事情就是创建我自己的Pojos,但是我们又回到了通常的JPA实体文件,如果数据库发生了变化,这些文件将无法正确地与记录映射。 1)弃用生成pojos是否意味着我

  • 我使用jooq针对本地数据库生成对象,但在以后的生产中运行“for real”时,实际数据库将具有不同的名称。为了解决这个问题,我使用

  • move key db-index 返回1成功。0 如果key不存在,或者已经在指定数据库中