文档

§H2 数据库

注意:从 Play 2.6.x 开始,您实际上需要自己包含 H2 依赖项。为此,您只需要将以下内容添加到您的 build.sbt 中

libraryDependencies += "com.h2database" % "h2" % "1.4.192"

H2 内存数据库对于开发非常方便,因为您的演变在 Play 重新启动时会从头开始运行。如果您使用的是 Anorm,您可能需要它来密切模拟您计划的生产数据库。要告诉 h2 您想要模拟特定数据库,请在您的 application.conf 文件中的数据库 URL 中添加一个参数,例如

db.default.url="jdbc:h2:mem:play;MODE=MYSQL"

§目标数据库

MySql MODE=MYSQL
  • H2 没有 uuid() 函数。您可以使用 random_uuid() 代替。或者将以下行插入您的 1.sql 文件中
    CREATE ALIAS UUID FOR
    "org.h2.value.ValueUuid.getNewRandom";
  • 默认情况下,MySQL 中的文本比较是不区分大小写的,而在 H2 中是区分大小写的(与大多数其他数据库一样)。H2 支持不区分大小写的文本比较,但需要单独设置,使用 SET IGNORECASE TRUE。这会影响使用 =、LIKE、REGEXP 的比较。
DB2 MODE=DB2
Derby MODE=DERBY
HSQLDB MODE=HSQLDB
MS SQL MODE=MSSQLServer
Oracle MODE=Oracle
PostgreSQL MODE=PostgreSQL

§防止内存数据库重置

默认情况下,H2 会在没有连接到它的情况下删除您的内存数据库。您可能不希望发生这种情况。要防止这种情况,请将 DB_CLOSE_DELAY=-1 添加到 URL 中(使用分号作为分隔符),例如:jdbc:h2:mem:play;MODE=MYSQL;DB_CLOSE_DELAY=-1

注意:Play 的内置 JDBC 模块会自动添加 DB_CLOSE_DELAY=-1,但是如果您使用的是 play-slick 和演变,则需要手动将 ;DB_CLOSE_DELAY=-1 添加到您的数据库 URL 中,否则演变将处于无限循环中,因为 Play 应用程序将在演变运行后重新启动,因此应用的演变将直接丢失。

§注意事项

默认情况下,H2 会创建使用大写名称的表。有时您可能不希望这样做,例如在某些兼容模式下使用 H2 和 Play evolutions 时。要防止这种情况,请将 DATABASE_TO_UPPER=FALSE 添加到 URL 中(使用分号作为分隔符),例如:jdbc:h2:mem:play;MODE=PostgreSQL;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=FALSE

§H2 浏览器

您可以在 sbt shell 中输入 h2-browser 来浏览数据库的内容。一个 SQL 浏览器将在您的网页浏览器中运行。

§H2 文档

更多 H2 文档可在 他们的网站上找到

下一步:管理数据库演变


发现此文档中的错误?此页面的源代码可以在 这里找到。在阅读了 文档指南 后,请随时贡献一个 pull 请求。有疑问或建议要分享?前往 我们的社区论坛 与社区开始对话。