0

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 で、予想されるステートメントを問題なく実行できます。私の構文エラーは何ですか?

4

1 に答える 1