如何使用play框架和scala将数据插入数据库

时间:2013-05-20 06:12:52

标签: mysql scala playframework

嗨我正在使用play框架和scala。      将userprofile数据插入数据库不起作用。      登录和注册功能正在运行和数据库       插入和连接是正确的..在控制台中成功创建的mysql连接是       可见所以mysql连接没问题

    the method  inside the application 

    def saveUserProfile = Action { implicit request =>
                if (request.session.get("userId") == None) {
                  Results.Redirect("/")
                } else {


                  val user_account_id = request.session.get("userId").get.toLong
                  val useraccount = UserAccount.findByUserAccountId(user_account_id).get

                  userProfileForm.bindFromRequest.fold(

                    errors => BadRequest(views.html.userProfile(errors, useraccount)),

     the real problem starts Here... when i am debug this program  the next line not executed..
                    userprofile => {

                      val userProfileOpt = UserAccount.userProfile(11)
                      println(userProfileOpt)

                    in here userProfileOpt contain null value.. that is the real problem..
                    that is userProfileOpt=null not contain the id..


                      userProfileOpt match {


                        case None =>

                          val updateduserProfile = UserProfile(NotAssigned,
                              Option(user_account_id), 
                            userprofile.name,
                            userprofile.date_of_birth, userprofile.gender, 
                            userprofile.image,userprofile.status)

                            UserProfile.insert(updateduserProfile)
                          val alert: Alert = new Alert("success", " User Profile Saved")
                          Common.setAlert(alert)


                        case Some(userProfileFound: UserProfile) =>

                          val updatedUserProfile = UserProfile(userProfileFound.id,
                            userProfileFound.user_account_id, userProfileFound.name,
                            userProfileFound.date_of_birth, userProfileFound.gender,
                            userProfileFound.image,userProfileFound.status)

                            UserProfile.update(updatedUserProfile)
                          val alert: Alert = new Alert("success", " User Profile Updated")
                          Common.setAlert(alert)
                      }
                      Results.Redirect("/userProfile")
                    })
                }
              }



and my userProfile form method is inside the application ,

  /**
   * UserProfile Form
   */
  val userProfileForm = Form(
    Forms.mapping(
      "id" -> ignored(NotAssigned: Pk[Long]),
      "user_account_id" ->optional(longNumber),
      "name" -> nonEmptyText,
      "data of birth" -> date,
      "gender" -> nonEmptyText,
      "image" -> nonEmptyText,
      "status" -> nonEmptyText )(UserProfile.apply)(UserProfile.unapply))

  def index = Action {
    val alert: Alert = new Alert("", "")
    Common.setAlert(alert)
    Ok(views.html.index(signInForm, "Friends+"))
      } 

....and the method is under..
this method inside the model and the model name is userprofile.....

 def userProfile(user_account_id:Long)={
    DB.withConnection{ implicit connection =>
    val userDetail = SQL(
    """
        select * from USER_PROFILE
        where USER_ACCOUNT_ID = {user_account_id}
    """).on(
        'user_account_id -> user_account_id).as(UserProfile.simple.singleOpt)  
        userDetail
    }
  }
    ....i am really strugle   this problem with 
     days ...
       i don't know how to handle with this problem..

1 个答案:

答案 0 :(得分:1)

我有同样的问题,我通过以下方式解决:

           val userProfileForm = Form(
            Forms.mapping(
              "id" -> ignored(NotAssigned: Pk[Long]),
              "user_account_id" -> optional(longNumber),
              "name" -> nonEmptyText,

问题出在这里,出生日期的类型是日期,格式如下:

              "date_of_birth" -> date("YYYY/MM/dd"),
              "gender" -> nonEmptyText,
              "image" -> nonEmptyText,
              "status" -> nonEmptyText)
                      (UserProfile.apply)(UserProfile.unapply))
                       println("1")