2012-05-02 106 views
8

我正在通过Play Framework 2.0开发一个Web应用程序。Play Framework和DB2

因为我需要访问DB2数据库,添加以下行到我的应用程序的application.conf文件:

db.mydb.driver=com.ibm.db2.jcc.DB2Driver 
db.mydb.url="jdbc:db2://host:port/databaseName" 
db.mydb.user=user 
db.mydb.password=pass 
db.mydb.jndiName=databaseName 

我成功地连接到该数据库,但有下列情况除外:

[info] play - datasource [jdbc:db2://host:port/databaseName] bound to JNDI as databaseName 
[info] play - database [databaseName] connected at jdbc:db2://host:port/databaseName 
[warn] application - play_evolutions table already existed 
[error] application - 

! @6a8ib4hd7 - Internal server error, for request [GET /] -> 

play.api.UnexpectedException: Unexpected exception [SqlSyntaxErrorException: DB2 
SQL Error: SQLCODE=-204, SQLSTATE=42704, SQLERRMC=DB2ADMIN.PLAY_EVOLUTIONS, DRI 
VER=4.12.55] 
     at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$3$$anon 
fun$1.apply(ApplicationProvider.scala:134) ~[play_2.9.1.jar:2.0] 
     at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$3$$anon 
fun$1.apply(ApplicationProvider.scala:112) ~[play_2.9.1.jar:2.0] 
     at scala.Option.map(Option.scala:133) ~[scala-library.jar:0.11.2] 
     at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$3.apply 
(ApplicationProvider.scala:112) ~[play_2.9.1.jar:2.0] 
     at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$3.apply 
(ApplicationProvider.scala:110) ~[play_2.9.1.jar:2.0] 
     at scala.Either$RightProjection.flatMap(Either.scala:277) ~[scala-librar 
y.jar:0.11.2] 
Caused by: com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-2 
04, SQLSTATE=42704, SQLERRMC=DB2ADMIN.PLAY_EVOLUTIONS, DRIVER=4.12.55 
     at com.ibm.db2.jcc.am.hd.a(hd.java:676) ~[db2jcc4.jar:na] 
     at com.ibm.db2.jcc.am.hd.a(hd.java:60) ~[db2jcc4.jar:na] 
     at com.ibm.db2.jcc.am.hd.a(hd.java:127) ~[db2jcc4.jar:na] 
     at com.ibm.db2.jcc.am.mn.c(mn.java:2621) ~[db2jcc4.jar:na] 
     at com.ibm.db2.jcc.am.mn.d(mn.java:2609) ~[db2jcc4.jar:na] 
     at com.ibm.db2.jcc.am.mn.a(mn.java:2085) ~[db2jcc4.jar:na] 

为了解决这个问题,我尝试禁用Evolution中设置application.conf文件中的以下行:

evolutions=disabled 
evolutions.enable=false 

但我总是得到上述例外。

任何人都可以帮助我吗?

由于

+0

在增加配置的线条,是一个错字,或实际参数真名叫什么? –

+0

不,这是一个错字,我已经设置的值是不同的... 通过我的使用方式: evolutions.enabled =假 不evolutions.enable =假 – RedEagle

回答

2

DB2 -204 SQLCODE手段:

由名称标识的对象未在DB2®子系统定义。可以为任何类型的DB2对象生成此SQLCODE。

...

验证对象名称是在SQL语句中,包括任何所需的预选赛正确指定。如果正确,请在重新提交语句之前确保该对象存在于系统中。

看来表DB2ADMIN.PLAY_EVOLUTIONS不存在。如果它存在,请尝试使用SQL客户端连接到数据库并执行select * from DB2ADMIN.PLAY_EVOLUTIONS with ur for read only;以验证该表是否存在。

此外,你可能想在application.conf文件中使用代替evolutions=disabled(见播放git的承诺providing a way to disable EvolutionPlugin through configuratio…)。

+0

这就是事情...我仍然没有任何SQL代码,并且Evolutions被禁用(使用您指定的语法),所以我不明白为什么SQL命令正在执行中...... – RedEagle

7

OK ...终于找到了问题的根源...

就像我说的,我使用播放Framework 2.0和在形式正在随该版本游戏的教程项目...

事实证明的命令禁用演变既不是:

变阵=禁用 演变=禁用

...反倒是:

evolutionplugin =禁用

感谢