gpt4 book ai didi

scala - 如何将从 Anorm 中的 executeInsert 返回的 Any 转换为 Long

转载 作者:行者123 更新时间:2023-12-02 22:11:24 25 4
gpt4 key购买 nike

在我的 Scala Playframework 应用程序中,我尝试使用 executeInsert 创建一个 sms_token(class)。然后使用主键创建一个唯一 token ,将其添加到 sms_token 并使用 executeUpdate 保存。

case class SmsToken(id: Option[Long], token: String, phoneNumber: String, startDate: Option[Date], endDate: Option[Date], used: Boolean, tempReviewGrade: Option[Int], tempReviewText: Option[String])

object SmsToken {
val simple = {
get[Option[Long]]("id") ~
get[String]("token") ~
get[String]("phone_number") ~
get[Option[Date]]("start_date") ~
get[Option[Date]]("end_date") ~
get[Boolean]("used") ~
get[Option[Int]]("temp_review_grade") ~
get[Option[String]]("temp_review_text") map {
case id ~ token ~ phone_number ~ start_date ~ end_date ~ used ~ temp_review_grade ~ temp_review_text => SmsToken(id, token, phone_number, start_date, end_date, used, temp_review_grade, temp_review_text)
}
}
}

方法:

 def createToken(n: String): Option[Long] = {

var addedTokenPk = 0L

val result = DB.withConnection {
implicit connection =>
SQL("insert into sms_token(token, phone_number, start_date, end_date, used, temp_review_grade, temp_review_text) values({token},{phone_number},{start_date},{end_date},{used}, {temp_review_grade}, {temp_review_text})").on(
'token -> "",
'phone_number -> n,
'start_date -> new Date(),
'end_date -> new Date(),
'used -> 0,
'temp_review_grade -> 0,
'temp_review_text -> ""
).executeInsert()
}
result match {
case Some(pk) => {
addedTokenPk = pk.asInstanceOf[Long]
}
case None => println("YAAARRRRR")
}

if (addedTokenPk != 0L) {

val token = Util.createUniqueToken(addedTokenPk)

DB.withConnection {
implicit connection =>
SQL("update sms_token s set s.token={token} where s.id={id}").on(
'id -> ("" + addedTokenPk).toLong,
'token -> token
).executeUpdate()
}
return Some(addedTokenPk)
}
None
}

我的问题是关于这部分的:

result match {
case Some(pk) => {
addedTokenPk = pk.asInstanceOf[Long]
}
case None => println("YAAARRRRR")
}

executeInsert 返回一个 Any 对象,因为键是 Long 我正在做 asInstanceOf[Long]因为我稍后在更新部分需要它。我是 Scala 菜鸟,所以我不确定这是否正确。也许有更好的 Scala 方法?

最佳答案

如果您在 executeInsert 结果上调用 map,您将获得 Long id

DB.withConnection { implicit connection =>
SQL("...").executeInsert().map(id => println(id))
}

关于scala - 如何将从 Anorm 中的 executeInsert 返回的 Any 转换为 Long,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15250402/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com