DRY を回避するために、変数列名と ScalikeJDBC の sql 補間を介してそれらの列を埋めるデータを使用して sql INSERT ステートメントを作成しようとしています。
case class MySQLInsertMessage(tableName:String, columns:List[String], values:List[String])
def depositMessage(msg: MySQLInsertMessage): Unit = {
NamedDB('MySQLMsgDepositor) localTx { implicit session =>
val sqlStmt = sql"INSERT INTO ${msg.tableName} (${msg.columns}) VALUES (${msg.values})"
println("The sql statement is: " + sqlStmt.statement)
println("The parameters are: " + sqlStmt.parameters)
sqlStmt.update().apply()
}
}
そして、これを次のように呼び出すと:
depositMessage(MySQLInsertMessage("My_Table", List("key", "email"), List("42", "user@email.com")))
結果のコンソール出力は次のとおりです。
SQL ステートメントは次のとおりです。 INSERT INTO ? (?, ?) 値 (?, ?)
パラメータは次のとおりです: List(My_Table, key, email, 42, user@email.com)
SQL 構文にエラーがあります。''My_Table' ('key', 'email') VALUES ('42', 'user@emai' at line 1 java.sql.SQLSyntaxErrorException: SQL 構文にエラーがあります。使用する MySQL サーバーのバージョンに対応するマニュアルで、使用する正しい構文を確認してください Near ''My_Table' ('key', 'email') VALUES ('42', 'user@emai' 1行目
sql"..."
代わりに をそのままラップしてみましたsql"""..."""
が、違いはないようです。MySQL ワークベンチ GUI で、予想されるステートメントを問題なく実行できます。私の構文エラーは何ですか?