簡體   English   中英

使用Anorm和Play 2.2 for Scala從RDBMS中選擇

[英]Select from RDBMS using Anorm and Play 2.2 for Scala

為了使用Anorm從表中檢索行,我放下了這段代碼,但出現錯誤。 這是代碼:

case class UserInquiry(
    id:Long, description:String
)

object UserInquiry {
   val byIdStmt = """
      SELECT id, description FROM user_inquiry WHERE id = {id}
   """

   def findById(id: Long) = {
      DB.withConnection { implicit conn =>
         SQL(byIdStmt).on("id" -> id).apply().collect {  
            case Row(Some(id:Integer), Some(description:String)) => 
            new UserInquiry(id.toLong, description)
         }.head
      }    
   }
}

// This gives me an error
val id = UserInquiry.findById(7) 

這是錯誤:

[MatchError: Row('ColumnName(user_inquiry.id,Some(id))':4 as java.lang.Integer,
'ColumnName(user_inquiry.description,Some(description))':My search as java.lang.String)
(of class anorm.SqlRow)]

如果我從SQL語句中刪除“ id”列,並且從代碼中刪除其引用以僅獲取名為“ description”的列,則一切正常。

“ id”列中有什么問題? 如果它是java.lang.Integer列,為什么不匹配? 是否有特定於數據庫“主鍵”的類?

好的,我弄錯了:

作為PK的“ id”列,以下代碼行

case Row(Some(id:Integer), Some(description:String)) 

必須更改為:

case Row(id:Integer, Some(description:String)) 

這是因為PK列不能為NULL,因此不希望使用Option [T]對象封裝從數據庫中檢索到的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM