私はScalaとSlickに不慣れで、Slick補間を使用してプレーンSQLクエリを作成しようとしています。
ケース1:クエリが定数として格納されるように、コードを一般化する必要があります。
例えば:
val SQL_ALL_TABLE_METADATA: String = """SELECT DISTINCT table_name, column_name, data_type
FROM information_schema.columns
WHERE table_schema = 'apollo' OR table_schema = 'dpa' ORDER BY table_name""";
そして、次のような定数からプレーンクエリを作成します
var plainQuery = sql"""$SQL_ALL_TABLE_METADATA""".as[List[String]]
ケース2:クエリの一部を置き換える
例:テーブル 'table1'から列f_nameに関する情報を取得します
var column= "f_name"
var plainQuery = sql"""SELECT $column FROM table1""".as[String]
上記のケースを試してみると、クエリがコンパイル時に静的にバインドされているように見えるため、機能しません。
今のところ、プレーンSQLを使用し、将来的には高度なSlickAPIを使用したいことに注意してください。
なぜこれを持っていないのですか?
val SQL_ALL_TABLE_METADATA: StaticQuery = sql"""SELECT DISTINCT table_name, column_name, data_type
FROM information_schema.columns
WHERE table_schema = 'apollo' OR table_schema = 'dpa' ORDER BY table_name"""
var plainQuery = SQL_ALL_TABLE_METADATA.as[List[String]]
var column= "f_name"
var plainQuery = sql"""SELECT #$column FROM table1""".as[String]
補間を使用していない回答を投稿しています。誰かが役立つと思うかもしれません。
テストでそのように解決しました。executeUpdateメソッドはクエリの実際の結果を返します。 String変数から動的クエリを実行できました。
dbConnection = JdbcBackend.Database.forURL(url = dbConfig.getString("db.url"), driver = "org.h2.Driver")
val createTablesSqlQuery:String = //read_from_file
dbConnection.createSession().createStatement().executeUpdate(createTablesSqlQuery)
役立つトピックはこれでした: https://groups.google.com/forum/#!topic/scalaquery/OxAgtcCPMyg