2016-01-12 2 views
0

Я начинаю работать с гладким и Скале, и кажется, что я до сих пор не имею основу сглаживать:Slick строка Scala в базе

Я использую пятно 3.0.0 и 2.11.7 и Скала Я подключение к базе данных Oracle.

Я хочу, чтобы получить количество строк в моем столе, так что я пошел и сделал поиск и нашел следующее: 1) Это один говорит мне, что .run не существует:

mytable.length.run 

2) Это один говорит мне, что есть несоответствие типов найдено: slick.lifted.Rep [Int] и ожидается строка:

var q = for(u <- mytable) yield u.id 
print(q.size) 

3) Это один компилируется и работает, но печатает Rep (Pure $ @ 309962262):

var q = for{row <- mytable} yield row 
println(Query(q.length)) 

Так что я не уверен, что это потому, что я не понимаю, как это работает, но я воображал, что следующее должно произойти:

A) constructQuery б) «Выполнить» запрос.

Так другие запросы, которые я использую, являются следующие:

val db = Database.forConfig("Oracle") 
try{ 
    val f: Future[Unit] = { 
    val query: StreamingDBIO[Seq[String], String] = participants.map(_.id).result // A)"Construct query" 
    val stremQuery: DatabasePublisher[String] = db.stream(query) //B) "Run query" 
    streamQuery.foreach(println) 
} 
Await.result(f, Duration.Inf) 

} 
finally db.close 

Что мне не хватает? номер 3 не дает мне то, что я хочу, потому что не находится под командой db.stream/db.run/db.something? Или я просто потерял =)

Заранее спасибо Тон

ответ

3

запрашивая базу данных в пятне в основном состоит из трех этапов:

  1. Создать Query
  2. Преобразование Query к Action
  3. Выполнение Action по базе данных

Так что ваш пример будет выглядеть примерно так (типа не являются обязательными, и добавил для ясности):

val query = mytable.length // length is an aggregation 
val action = query.result 
val result: Future[Int] = db.run(action) 

// Access result in a non blocking way (recommended): 
result.map(count: Int => ...) 

// or for completeness use Await (not recommended): 
val count: Int = Await.result(result, Duration.Inf) 

Дальнейшее чтение:

+0

Благодарность за ответ, это имеет смысл. Как-то я очень сильно борюсь с документацией Slick, но это позволяет легко увидеть. –

Смежные вопросы