Scala Play、Anorm和PostgreSQL:序列列有问题吗?
我将Play2.1.0与anorm、Scala2.10和PostgreSQL(9.1,驱动程序:9.1-901.jdbc4)一起使用。以下查询在MySQL中运行良好。在迁移到PostgreSQL之后,它就没有了。进入该方法后,在“隐式连接”行中抛出了一个“异常”,即调试器直接跳转到Sql.resultSetToStream行527,其中显然确定了列的元数据。在播放日志中没有显示错误 id字段在MySql中是一个整数,在PostgreSQL中是一个串行字段。阿诺姆对连载列有问题吗Scala Play、Anorm和PostgreSQL:序列列有问题吗?,scala,playframework,playframework-2.0,postgresql-9.1,anorm,Scala,Playframework,Playframework 2.0,Postgresql 9.1,Anorm,我将Play2.1.0与anorm、Scala2.10和PostgreSQL(9.1,驱动程序:9.1-901.jdbc4)一起使用。以下查询在MySQL中运行良好。在迁移到PostgreSQL之后,它就没有了。进入该方法后,在“隐式连接”行中抛出了一个“异常”,即调试器直接跳转到Sql.resultSetToStream行527,其中显然确定了列的元数据。在播放日志中没有显示错误 id字段在MySql中是一个整数,在PostgreSQL中是一个串行字段。阿诺姆对连载列有问题吗 def getU
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
}
}
问题是id列。显然,PostgreSQL将其视为一个虚词,因此如果将其放在“”之间,那么它就工作了,这意味着编写“id”可以解决问题。问题在于id列。显然,PostgreSQL将其视为一个虚词,因此如果将其放在“”之间,则它可以工作,这意味着写入“id”可以解决问题。是一个序列而不是
长的类型吗?不,我曾经读过它是一个int。但当sql实际上不会返回任何行时,问题就会出现。但我不明白为什么“无行”结果在MySQL中没有问题,而在PostgreSQL中却有问题。序列不是Long
类型吗?不,我曾经读过它是int。但问题发生在sql实际上不会返回任何行的时候。但我不明白为什么“无行”结果在MySQL中没有问题,而在PostgreSQL中却有问题。