Вставка в MySQL с помощью slick

У меня есть таблица под названием «KLIJENTI» в базе данных MySQL на локальном сервере ampps. Таблица состоит из 4 столбцов: ID_KLIJENTA - int, IME_KLIJENTA - строка, PREZIME_KLIJENTA - строка и ADRESA_KLIJENTA - строка. Я следил за учебными пособиями о том, как использовать 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, запись не добавляется.


person xpg94    schedule 29.11.2015    source источник


Ответы (1)


Вы не получаете реальных значений, потому что вам нужно преобразовать запрос в действие, вызвав его метод результата и выполнив его.

val action = q2.result
val results = db.run( action)
results.foreach( println )
person Community    schedule 29.11.2015
comment
Я только что попробовал этот код, он компилируется, но ничего не возвращает, и в результате ничего не распечатывается. - person xpg94; 30.11.2015
comment
Это зависит от фильтра val q2 = mojiKlijenti.filter(_.ID_KLIJENTA === 0) получить строки с этим значением в указанном столбце. - person ; 30.11.2015
comment
Я только что добавил еще одну строку в базу данных с ID_KLIJENTA = 2 , и первая строка имела значение ID_KLIJENTA = 1, теперь я изменил свой код на 1, а затем на 2, и все равно я не получаю никаких результатов, и ничего не печатается :( - person xpg94; 30.11.2015