我使用Play 2.1.0和anorm,Scala 2.10和PostgreSQL(9.1,驱动程序:9.1-901.jdbc4)。以下查询在MySQL中运行良好。转移到PostgreSQL后它没有。输入方法后,在“隐式连接”行中引发了“异常”,即i.d.调试器直接跳转到Sql.resultSetToStream第527行,其中显然确定了列的元数据。在Play日志中没有显示错误...
id字段在MySql中是一个整数,而在PostgreSQL中它是一个序列。 Anorm是否存在串行列的问题?
def getUserId(userName: String): Int = {
DB.withConnection {
implicit connection =>
try {
val result = SQL("select id from users where user_name = {userName}")
.on('userName -> userName).apply().head
result[Int]("id")
} catch {
case e: SQLException =>
Logger.error(e.getStackTraceString)
//error logged, but no problem when we return 0
0
}
}
}
我在同一个表中的insert语句遇到了同样的问题。
有趣的是,以下查询有效:
def checkCredentials(userName: String, password: String): Boolean = {
DB.withConnection {
implicit connection =>
try {
val result = SQL("select count(*) as c from users where user_name = {userName} and password = crypt({password}, password)")
.on('userName -> userName,
'password -> password).apply().head
result[Long]("c") > 0
} catch {
case e: SQLException =>
Logger.error(e.getStackTraceString)
false
}
}
答案 0 :(得分:1)
问题是id列。显然PostgreSQL认为这是一个功能词,所以如果你把它放在''那么它可以工作,这意味着写'id'解决了这个问题。