在 play 框架中连接到本地 h2 数据库

Posted

技术标签:

【中文标题】在 play 框架中连接到本地 h2 数据库【英文标题】:Connecting to local h2 database in play framework 【发布时间】:2015-09-13 02:19:55 【问题描述】:

我刚开始使用 Play 框架,但在执行第一步时遇到了麻烦。默认情况下,application.conf 的 url 是内存数据库

db.default.url="jdbc:h2:mem:play"

我尝试将其更改为

db.default.url="jdbc:h2:tcp://localhost/c:/Database/MyPlayDB" 

看到answer 之后,但我的应用程序在进行更改后没有运行。我得到的错误是

Error in custom provider, Configuration error: Configuration error[Cannot connect to database [default]]

有人可以告诉我是否需要进行任何其他更改或指出正确的方向吗?

谢谢!

【问题讨论】:

能否请您向我们展示您的 META-INF/persistance.xml 和 application.conf 的数据库部分? 我的persistance.xml 是空白的,.conf 文件有following 用于数据库 网址可能有误。您想将数据库存储到本地文件中,对吗?然后使用db.default.url="jdbc:h2:databasefilename" 那么,databasefilename 应该是本地机器上的路径还是只是名称?如果只是名称,它是在哪里创建的? 两者都可以。例如。使用db.default.url="jdbc:h2:databasefolder/databasefilename",您的数据库文件存储在应用程序根文件夹中的“databasefolder”文件夹中。 【参考方案1】:

我想你没有“在服务器模式下运行 H2”。

编辑:

如何在服务器模式下运行H2:

    从H2 Downloading page 下载 H2。我使用“Platform-Independent Zip”,因为我目前在 mac 上。 打开包装。比方说~/user/h2(在windows的情况下是C:/h2) 进入终端解压后的文件夹并运行“java -jar bin/h2*.jar”。之后必须使用 H2 服务器 UI 控制台打开此默认浏览器。 URL 类似于“http://192.168.0.109:8082/login.jsp?jsessionid=abce6eb1b211a737afe8c2abc6be6390” 您可以运行需要连接到 H2 的应用程序,例如使用设置 db.default.url="jdbc:h2:tcp://localhost/c:/Database/MyPlayDB" 的 Play 应用程序

验证我的本地安装。

如果我将配置设置为,我可以成功运行播放

db.default.url="jdbc:h2:mem:play"

如果将配置设置为

,我得到“自定义提供程序错误,配置错误:配置错误[无法连接到数据库 [默认]]”
db.default.url="jdbc:h2:tcp://localhost/c:/Database/MyPlayDB" 

如果我在服务器模式下运行H2并将配置设置为

,我可以成功运行播放
db.default.url="jdbc:h2:tcp://localhost/c:/Database/MyPlayDB" 

【讨论】:

你能告诉我在 H2 模式下运行它需要做什么吗?另外,我希望在运行 Play 应用程序时创建数据库文件。所以,如果我没有数据库,我不确定如何在服务器模式下运行 H2 阅读该答案 - 它已创建,您可以通过地址“jdbc:h2:mem:play”连接到它。问题是您尝试连接到“jdbc:h2:tcp://localhost/c:/Database/MyPlayDB” - 所以您需要独立于播放运行 h2 服务器并配置该数据库。我建议您使用默认的“jdbc:h2:mem:play”或阅读如何将 h2 作为服务器运行(该答案中有链接) 我没有使用内存数据库的选项。我一直在研究运行 h2 服务器,但它与我们给出的步骤完全冲突。显然这些都不是必需的。但是,我从文档中查看了import org.h2.tools.Server; // start the TCP Server Server server = Server.createTcpServer(args).start(); ... // stop the TCP Server server.stop();,但我不确定必须在我的播放应用程序中的哪个位置插入它。你能说明一下吗? 看看我的编辑部分 您不必运行外部 H2 服务器。据我了解,Aadithya 想将数据库存储在一个文件中。为此,您可以在您的application.conf 中使用db.default.url="jdbc:h2:databasefilename"。但是您必须在persistance.xml 中配置您的持久性单元。

以上是关于在 play 框架中连接到本地 h2 数据库的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Flutter 应用程序中连接到本地实时数据库模拟器?

如何在 VB.net 中连接到本地网络上的 Access 数据库?

尝试在我的本地主机中连接到我的数据库,但不断收到错误消息

在生产模式下访问 Play 框架的嵌入式 H2 数据库

在 C# 中连接到 MySql 数据库

在 Play 框架中注入 MongoDB 实例 [java]