Play,Anorm和PostgreSQL:串行列的问题?

时间:2013-05-23 21:41:34

标签: scala playframework playframework-2.0 postgresql-9.1 anorm

我使用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
    }
}

1 个答案:

答案 0 :(得分:1)

问题是id列。显然PostgreSQL认为这是一个功能词,所以如果你把它放在''那么它可以工作,这意味着写'id'解决了这个问题。