2016-06-17 9 views
1

In der folgenden Ebene SQL-Anweisung in Slick Ich weiß im Voraus, dass es eine Liste zurück (String, String)Erste Metadaten in einfacher SQL-Anweisung in Slick 3.1.x

sql"""select c.name, s.name 
     from coffees c, suppliers s 
     where c.price < $price and s.id = c.sup_id""".as[(String, String)] 

Aber was, wenn ich don‘ kennen Sie die Spaltentypen? Kann ich die Metadaten analysieren und die Werte abrufen? In JDBC könnte ich getInt (n) und getString (n) verwenden, gibt es in Slick etwas ähnliches?

Antwort

0

Sie können tsql (Type-Checked SQL Statements) verwenden:

tsql"""select c.name, s.name 
     from coffees c, suppliers s 
     where c.price < $price and s.id = c.sup_id""" 

dies ein DBIO[Seq[(String, String)]] zurückkehren wird (abhängig von den Spaltentypen).

ein DBIOAction des richtigen Typs erzeugt einen Aufruf an .as

Hinweis, ohne dass: Ich habe es ein wenig flakey (bis zu dem Punkt des Seins unbrauchbar) mit Optionstypen gefunden, also passen wenn Ihre Spalten null (seit null: String) sein können.

Dies erfordert ein wenig für Verkabelung, müssen Sie @StaticDatabaseConfig (zB auf Ihrer DAO), da diese Arten überprüft werden, gegen die Datenbank, bei der Kompilierung:

# annotate the object 
@StaticDatabaseConfig("file:src/main/resources/application.conf#tsql") 
... 

    val dc = DatabaseConfig.forAnnotation[JdbcProfile] 
    import dc.driver.api._ 
    val db = dc.db 

    # to pull out a Future[Seq[String, String]] 
    # use db.run(tsql"...") 
    # to pull out a Future[Option[(String, String)]] 
    # use db.run(tsql"...".headOption) 
    # etc. 
+0

aber wie bekomme ich die Ergebnismenge Metadaten? – ps0604