2016-06-17 5 views
1

В следующем простом заявлении SQL в Slick я заранее знаю, что он будет возвращать список (String, String)Получение метаданных в простом заявлении SQL в 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)] 

Но что, если я не» Знать типы столбцов? Могу ли я анализировать метаданные и получать значения? В JDBC я мог бы использовать getInt (n) и getString (n), есть ли что-то подобное в Slick?

ответ

0

Вы можете использовать tsql (Type-Checked SQL Statements):

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

это вернет DBIO[Seq[(String, String)]] (в зависимости от типов столбцов).

производит DBIOAction правильного типа без необходимости вызова .as

Примечание: Я нашел его немного Flakey (к точке бытия непригодным для использования) с типами опционов, так что будьте осторожны если ваши столбцы могут быть nullnull: String).

Это требует немного разводку, вам нужно @StaticDatabaseConfig (например, на вашем DAO), так как проверяются эти типы, с базой данных, во время компиляции:

# 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

но как я могу получить метаданные набора результатов? – ps0604

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