【问题标题】:Inserting into MySQL using slick使用 slick 插入 MySQL
【发布时间】:2015-11-30 06:28:35
【问题描述】:

我在 ampps localhost 服务器上的 MySQL 数据库中有一个名为“KLIJENTI”的表。表由 4 列组成:ID_KLIJENTA - int、IME_KLIJENTA - string、PREZIME_KLIJENTA - string 和 ADRESA_KLIJENTA - string。 我遵循了有关如何使用 slick 插入和读取数据库的教程,但它并没有达到我想要的效果。

这是我的 application.conf:

scalaTest = {
url = "jdbc:mysql://localhost/Scala1"
user = "root"
password = "mysql"
driver = com.mysql.jdbc.Driver
connectionPool = disabled
keepAliveConnection = true
logStatements = true
}

build.sbt:

name := """project4"""

mainClass in Compile := Some("HelloSlick")

libraryDependencies ++= List(
  "com.typesafe.slick" %% "slick" % "3.1.0-RC2",
  "org.slf4j" % "slf4j-nop" % "1.7.10",
  "com.h2database" % "h2" % "1.4.187",
  "org.scalatest" %% "scalatest" % "2.2.4" % "test" ,
  "mysql" % "mysql-connector-java" % "5.1.28"
)

fork in run := true

这是我的 helloSlick.scala:

import scala.concurrent.{Future, Await}
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.duration.Duration
import slick.backend.DatabasePublisher
import slick.driver.MySQLDriver.api._


case class Klijent(ID_KLIJENTA: Option[Int] = None, IME_KLIJENTA: String, PREZIME_KLIJENTA: String, ADRESA_KLIJENTA: String)

class Klijenti(tag: Tag) extends Table[Klijent](tag, "KLIJENTI") {
  def ID_KLIJENTA = column[Option[Int]]("ID_KLIJENTA", O.PrimaryKey, O.AutoInc)
  def IME_KLIJENTA = column[String]("IME_KLIJENTA")
  def PREZIME_KLIJENTA = column[String]("PREZIME_KLIJENTA")
  def ADRESA_KLIJENTA = column[String]("ADRESA_KLIJENTA")

  def * = (ID_KLIJENTA, IME_KLIJENTA, PREZIME_KLIJENTA , ADRESA_KLIJENTA) <>((Klijent.apply _).tupled, Klijent.unapply)
}

// The main application
object HelloSlick extends App {

  val db = Database.forConfig("scalaTest")
  val mojiKlijenti = TableQuery[Klijenti]
  val q1 = sql"select IME_KLIJENTA from KLIJENTI WHERE ID==1 ".as[String]

  val q2 = mojiKlijenti.filter(_.ID_KLIJENTA === 0)

  println(q1)
  println(q2)

在我运行这段代码之前,我已经通过 phpmyadmin 在数据库中插入了一行,所以值 q1 和 q2 都应该打印出真实值,但我得到的是:

background log: info: Running HelloSlick 
background log: info: slick.jdbc.SQLActionBuilder$$anon$1@56300388
background log: info: Rep(Filter @1636634026)

我的 apache 网络服务器和 mysql 已打开,以防万一有人问.. 为什么我没有得到真正的价值?

编辑:>稍后,我尝试执行以下命令 mojiKlijenti += Klijent(Some(5),"Name","Surname","Address") 并再次编译成功,但是当我在 phpmyadmin 中检查我的数据库时,没有添加任何记录..

【问题讨论】:

    标签: mysql scala slick


    【解决方案1】:

    您没有获得真正的值,因为您需要通过调用其结果方法并将查询转换为操作并执行它。

    val action = q2.result
    val results = db.run( action)
    results.foreach( println )
    

    【讨论】:

    • 我刚刚尝试了该代码,它可以编译,但它什么也没返回,结果也没有打印出来。
    • 这取决于过滤器val q2 = mojiKlijenti.filter(_.ID_KLIJENTA === 0) 在指定列中获取具有该值的行。
    • 我刚刚在 ID_KLIJENTA = 2 的数据库中添加了一行,第一行的值是 ID_KLIJENTA = 1,现在我将代码更改为 1,然后更改为 2,我仍然没有结果,也没有打印任何内容:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-01
    • 2015-10-23
    • 1970-01-01
    相关资源
    最近更新 更多