Scala, Slick подключаются к серверу MSSQL

Я пытаюсь подключиться к базе данных MSSQL, используя гладкую структуру. Следующий код показывает мою первую попытку, но я не могу понять, что не так.

Эта ошибка возникает при выходе из него, как показано ниже: [1] создание значения не является членом scala.slick.lifted.DDL.

Теперь я удаляю строку, потому что мне не обязательно создавать таблицу в моем коде Scala. Но тогда возникает другая ошибка: [2] карта значений не является членом объекта asd.asd.App.Coffees

package asd.asd

import scala.slick.driver.SQLServerDriver._
import scala.slick.session.Database.threadLocalSession

object App {

object Coffees extends Table[(String, Int, Double)]("COFFEES") {
  def name = column[String]("COF_NAME", O.PrimaryKey)
  def supID = column[Int]("SUP_ID")
  def price = column[Double]("PRICE")
  def * = name ~ supID ~ price
}

  def main(args : Array[String]) {
    println( "Hello World!" )

    val db = slick.session.Database.forURL(url = "jdbc:jtds:sqlserver", user = "test", password = "test", driver = "scala.slick.driver.SQLServerDriver")

    db withSession {

      Coffees.ddl.create [1]

//        Coffees.insertAll(
//            ("Colombian",         101, 7.99),
//          ("Colombian_Decaf",   101, 8.99),
//          ("French_Roast_Decaf", 49, 9.99)
//        )

        val q = for {
            c <- Coffees [2]
        } yield (c.name, c.price, c.supID)

        println(q.selectStatement)

        q.foreach { case (n, p, s) => println(n + ": " + p) }
    }
  }

}

person Coxer    schedule 10.01.2014    source источник


Ответы (1)


Проблема решена. Я сделал следующее: обновил Slick до последней версии, а затем изменил код, как показано здесь. После этого вам нужно заменить строку

import scala.slick.driver.H2Driver.simple._

с

import scala.slick.driver.SQLServerDriver.simple._

И измените строку подключения на

[...]
Database.forURL("jdbc:jtds:sqlserver://localhost:1433/<DB>;instance=<INSTANCE>", driver = "scala.slick.driver.SQLServerDriver") withSession {
[...]

После того, как это сработало, я решил использовать соединение в пуле c3p0 (что делает Slick намного быстрее и, следовательно, первым пригодным для использования, я настоятельно рекомендую использовать пул соединений!). Это оставило меня со следующим объектом базы данных.

package utils

import scala.slick.driver.SQLServerDriver.simple._
import com.mchange.v2.c3p0.ComboPooledDataSource

object DatabaseUtils {
    private val ds = new ComboPooledDataSource
    ds.setDriverClass("scala.slick.driver.SQLServerDriver")
    ds.setUser("supervisor")
    ds.setPassword("password1")
    ds.setMaxPoolSize(20)
    ds.setMinPoolSize(3)
    ds.setTestConnectionOnCheckin(true)
    ds.setIdleConnectionTestPeriod(300)
    ds.setMaxIdleTimeExcessConnections(240)
    ds.setAcquireIncrement(1)
    ds.setJdbcUrl("jdbc:jtds:sqlserver://localhost:1433/db_test;instance=SQLEXPRESS")
    ds.setPreferredTestQuery("SELECT 1")
    private val _database = Database.forDataSource(ds)

    def database = _database
}

Вы можете использовать это, как показано ниже.

DatabaseUtils.database withSession {
    implicit session =>
    [...]
}

Последняя зависимость Maven для c3p0 и последняя версия Slick.

<dependency>
  <groupId>com.typesafe.slick</groupId>
  <artifactId>slick_2.10</artifactId>
  <version>2.0.0-M3</version>
</dependency>
<dependency>
  <groupId>com.mchange</groupId>
  <artifactId>c3p0</artifactId>
  <version>0.9.2.1</version>
</dependency>
person Coxer    schedule 28.01.2014
comment
Следует отметить, что, начиная с версии 2.0.0, драйвер SqlServer не является частью основной библиотеки slick slick.typesafe.com/doc/2.0.2/extensions.html. Вам нужно будет добавить «slick-extensions» в ваш файл Maven. - person anshumans; 31.07.2014
comment
или скопируйте этот файл в исходное дерево (и, возможно, опубликуйте его для всех) github.com/slick/slick/blob/ - person fommil; 23.01.2015
comment
кстати, BoneCP, как правило, более производительный/надежный, чем C3P0 blog.trustiv.co .uk/2014/06/battle-connection-pools - person fommil; 23.01.2015