在 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 应用程序中连接到本地实时数据库模拟器?