如何在scala play2.6 slick中将Select语句数据存储到var

问题描述 投票:0回答:1

我写了一个SQL选择查询,我想将从这个查询返回的结果存储到一些变量如何做到这一点

    val  count=(sql"""SELECT count(User_ID)  from user_details_table where email=$email or Mobile_no=$Mobile_no""".as[(String)]     )
   val a1=Await.result(dbConfig.run(count), 1000 seconds)

    Ok(Json.toJson(a1.toString())) 

在这里,我无法找到从此查询返回的ID

这是我完整的代码,我正在尝试做什么

import javax.inject.Inject
import play.api.mvc.{AbstractController, ControllerComponents}
import javax.inject.Inject
import play.api.mvc.{AbstractController, ControllerComponents}

import scala.concurrent.Await
import javax.inject.Inject
import play.api.mvc._
import com.google.gson.{FieldNamingPolicy, Gson, GsonBuilder}
import play.api.libs.json.Json

import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.{Await, Future}
import javax.inject.Inject
import org.joda.time.format.DateTimeFormat
import play.api.libs.json.{JsPath, Writes}
import slick.jdbc.GetResult

import scala.concurrent.ExecutionContext.Implicits.global
//import play.api.mvc._

import org.joda.time.{DateTime, Period}
import play.api.libs.json.Json
import play.api.mvc._


import scala.concurrent.{Await, Future}
import scala.concurrent.duration._
import com.google.gson.Gson
class adduserrs @Inject()(cc: ControllerComponents) extends AbstractController(cc)
{



  def adduser(Name:String,Mobile_no:String,email:String,userpassword:String,usertype:String) = Action
  {
    import play.api.libs.json.{JsPath, JsValue, Json, Writes}

    val gson: Gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE).create
    val dbConfig = Database.forURL("jdbc:mysql://localhost:3306/equineapp?user=root&password=123456", driver = "com.mysql.jdbc.Driver")


    var usertypeid=0;

    if(usertype=="Owner")
    {
      usertypeid=1;
    }
    else  if(usertype=="Practitioner")
    {
      usertypeid=2;
    }


    val  count=(sql"""SELECT count(User_ID)  from user_details_table where email=$email or Mobile_no=$Mobile_no""".as[(String)]     )
    val a1=Await.result(dbConfig.run(count), 1000 seconds)

    Ok(Json.toJson(a1.toString()))
    if (count==0) {

      val setup1 = sql"call addusersreg ($Name,$Mobile_no,$email,$userpassword,$usertypeid);".as[(String, String, String, String, Int)]
      val res = Await.result(dbConfig.run(setup1), 1000 seconds)
      Ok(Json.toJson(1))
    }
    else {
      Ok(Json.toJson(0))

    }
  }

从上面的代码iam只是尝试在数据库中插入userdetails如果用户存在于db中然后它将返回响应为0,否则它将返回响应为1

scala playframework slick
1个回答
0
投票

好的,所以这里你只是在计算,所以也许你只需要一个Long类型的变量:

SQL("select count(*) from User where tel = {telephoneNumber}")
   .on('telephobeNumber -> numberThatYouPassedToTheMethod).executeQuery()
   .as(SqlParser.scalar[Long].single)

无论如何,您完全改变了问题,因为您在评论中提到的错误,原因是您没有连接,也没有定义您想要使用的数据库(default或其他)。所有数据库调用都在以下块中:

db.withConnection{
  implicit connection => 
     //SQL queries live here. 
} 

此外,如果它不是db数据库,你需要注入default

class myTestModel @Inject()(@NamedDatabase("nonDefaultDB") db: Database){???}

遵循MVC架构:为了与模型 - 视图 - 控制器架构保持一致,所有数据库调用都应该在models类中。控制器方法需要为结果调用模型方法。

© www.soinside.com 2019 - 2024. All rights reserved.