【问题标题】:H2: how to set default schema and database?H2:如何设置默认模式和数据库?
【发布时间】:2014-07-15 16:34:25
【问题描述】:

我使用Liquibase 进行数据库更新并针对H2 进行测试。

我正在使用Spring 来配置属性。我用

dataSource.setUrl("jdbc:h2:mem:test_common");

连接到test_common数据库,但没有成功。

我意识到在H2 database != Schema 中,所以我尝试将默认架构设置为test_common

dataSource.setUrl("jdbc:h2:mem:test_common;INIT=CREATE SCHEMA test_common\\; SET SCHEMA test_common");

但这没有成功,我将日志视为

INFO 5/26/14 2:24 PM:liquibase: Dropping Database Objects in schema: TEST_COMMON.PUBLIC
INFO 5/26/14 2:24 PM:liquibase: Creating database history table with name: PUBLIC.DATABASECHANGELOG
INFO 5/26/14 2:24 PM:liquibase: Creating database history table with name: PUBLIC.DATABASECHANGELOG
INFO 5/26/14 2:24 PM:liquibase: Successfully released change log lock
INFO 5/26/14 2:24 PM:liquibase: Successfully acquired change log lock
INFO 5/26/14 2:24 PM:liquibase: Reading from PUBLIC.DATABASECHANGELOG
INFO 5/26/14 2:24 PM:liquibase: Reading from PUBLIC.DATABASECHANGELOG
INFO 5/26/14 2:24 PM:liquibase: Reading from PUBLIC.DATABASECHANGELOG
INFO 5/26/14 2:24 PM:liquibase: liquibase/changelog.xml: liquibase/2014/1-1.xml::05192014.1525::h2: Reading from PUBLIC.DATABASECHANGELOG
INFO 5/26/14 2:24 PM:liquibase: liquibase/changelog.xml: liquibase/2014/1-1.xml::05192014.1525::h2: Table network created
INFO 5/26/14 2:24 PM:liquibase: liquibase/changelog.xml: liquibase/2014/1-1.xml::05192014.1525::h2: ChangeSet liquibase/2014/1-1.xml::05192014.1525::h2 ran successfully in 5ms
INFO 5/26/14 2:24 PM:liquibase: liquibase/changelog.xml: liquibase/2014/1-1.xml::05192014.1525::h2: Reading from PUBLIC.DATABASECHANGELOG
INFO 5/26/14 2:24 PM:liquibase: liquibase/changelog.xml: liquibase/2014/1-2.xml::05192014.1525::h2: Reading from PUBLIC.DATABASECHANGELOG
INFO 5/26/14 2:24 PM:liquibase: liquibase/changelog.xml: liquibase/2014/1-2.xml::05192014.1525::h2: New row inserted into network
INFO 5/26/14 2:24 PM:liquibase: liquibase/changelog.xml: liquibase/2014/1-2.xml::05192014.1525::h2: New row inserted into network
INFO 5/26/14 2:24 PM:liquibase: liquibase/changelog.xml: liquibase/2014/1-2.xml::05192014.1525::h2: New row inserted into network
INFO 5/26/14 2:24 PM:liquibase: liquibase/changelog.xml: liquibase/2014/1-2.xml::05192014.1525::h2: New row inserted into network
INFO 5/26/14 2:24 PM:liquibase: liquibase/changelog.xml: liquibase/2014/1-2.xml::05192014.1525::h2: New row inserted into network
INFO 5/26/14 2:24 PM:liquibase: liquibase/changelog.xml: liquibase/2014/1-2.xml::05192014.1525::h2: New row inserted into network
INFO 5/26/14 2:24 PM:liquibase: liquibase/changelog.xml: liquibase/2014/1-2.xml::05192014.1525::h2: ChangeSet liquibase/2014/1-2.xml::05192014.1525::h2 ran successfully in 5ms
INFO 5/26/14 2:24 PM:liquibase: liquibase/changelog.xml: liquibase/2014/1-2.xml::05192014.1525::h2: Reading from PUBLIC.DATABASECHANGELOG

如何在 H2 中设置默认架构和数据库名称?

【问题讨论】:

  • 为什么不能连接到test_common db 工作?您的代码是否对数据库/模式名称进行编程查找?
  • 是的,确实如此,使用Spring Framework 中的@Configuration 类。见stackoverflow.com/questions/23874693/…

标签: database spring h2 liquibase


【解决方案1】:

默认架构是PUBLIC

作为记录,SET SCHEMA 命令的 H2 数据库站点的 Commands 页面显示:

新连接的默认架构是PUBLIC

该文档还指出,您可以在连接时指定默认架构:

此设置可以附加到数据库 URL:jdbc:h2:test;SCHEMA=ABC

只有一个数据库

关于访问各种数据库,H2不支持CLUSTERCATALOG的SQL Standard概念。作为 JDBC URL 的一部分,您连接到一个特定的数据库(目录)。与该数据库的连接仅限于该单个数据库。请参阅问题Can you create multiple catalogs in H2? 以及 Thomas Mueller 的回答。

您可以打开另一个到另一个数据库的连接,但它是完全独立的。

因此,在 H2 数据库中谈论“默认数据库”没有任何意义。

【讨论】:

    【解决方案2】:

    您似乎正在通过 Java API 与 Liquibase 进行交互。 Database 对象上有一个setDefaultSchemaName() 方法,可用于设置不同的默认架构。

    【讨论】:

      猜你喜欢
      • 2012-10-21
      • 2021-01-06
      • 2021-06-05
      • 2015-02-20
      • 2012-12-21
      • 2013-02-16
      • 2021-11-19
      • 1970-01-01
      • 2013-07-23
      相关资源
      最近更新 更多