Play!框架 - 无法连接到数据库

3

当我尝试连接到本地PostgreSQL数据库时,遇到了以下错误:

无法连接到数据库[default]

这是数据库配置。 我相信没有拼写错误(笔误)

db.default.url="postgres://localhost:5432/myproject/"
db.default.user="postgres"
db.default.pass="mypassword"
db.default.driver="org.postgresql.Driver"
db.default.initSQL="SELECT 1" 

问题出在哪里?使用pgAdmin可以轻松连接。
附言:
我正在使用Ubuntu。我注意到为了切换到postgres用户,
必须使用“su”,否则无法更改当前用户。
这是否与Play!无法连接我的数据库有关?

谢谢


1
你是否将Postgres JDBC驱动程序添加为Play的依赖项? - ndeverge
是的,我做了: val appDependencies = Seq( "postgresql" % "postgresql" % "9.1-901-1.jdbc4" ) - socksocket
3个回答

2

这是我的配置��件,它可以正常工作:

db.default.url="jdbc:postgresql://127.0.0.1:5432/dbname"
db.default.driver="org.postgresql.Driver"

只需在db.default.url之前添加jdbc:即可。


2

这不是直接回答你的问题,但我曾经遇到同样的错误信息并通过谷歌来到这里。使用Scala Play 2.3时,我遇到了

db.default.driver=org.postgresql.Driver
db.default.url="jdbc:postgresql://127.0.0.1:5432/noob_development"
db.default.logStatements=true

需要被...

db.default.driver="org.postgresql.Driver"
db.default.url="jdbc:postgresql://127.0.0.1:5432/noob_development"
db.default.logStatements=true

我不小心忘记在驱动程序名称周围加上引号。现在它完美地工作了。


2

你的设置中可能有两个问题或者至少是值得怀疑的。

首先: postgres:... URL语法不是一个普通的JDBC URL。这种格式并不被PostgreSQL JDBC驱动程序所理解。请参考这个答案来解决类似的问题。

其次:你正在尝试使用PostgreSQL超级用户账户进行Play开发。超级用户账户应该仅用于管理工作,而不是“正常”的工作。特别是不要通过某些web前端公开访问数据库。任何SQL注入攻击都会给攻击者提供访问您的数据库的黄金钥匙,包括一次性摧毁整个DB集群或在您的DB服务器上安装任何后门。

因此,我建议您创建一个新用户,并将其配置到您的Play!设置中。

话虽如此:在Ubuntu上,postgres用户的默认密码未设置。这种设置只允许从同一操作系统用户登录到DB用户。您可以参考这个答案来解决这个问题。

如果这两个提示没有帮助:你引用的错误非常模糊。一定有更详细的错误日志在某个地方。请找到它们并使用“编辑”按钮将它们附加到您的问题中。


但是我确实为用户postgres设置了密码,正如我之前提到的。 我甚至可以使用pgAdmin登录。 至于语法,那就是Play!框架文档所说的。 - socksocket
@socksocket:你真的尝试了第一部分吗? - A.H.
哦,错过了。我会立刻尝试。 - socksocket
@socksocket,你最终的问题到底是什么,你是如何解决的?我在Heroku上的Play 2.0应用程序中也遇到了同样的错误。 - Jay Taylor
@JayTaylor:我猜他使用了“第一部分”中的链接。 - A.H.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,