为避免 DRY,我试图创建一个带有可变列名的 sql INSERT 语句和通过 ScalikeJDBC 的 sql 插值填充这些列的数据:
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 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 ''My_Table' ('key', 'email') VALUES ('42', 'user@emai' at line 1 java.sql.SQLSyntaxErrorException:您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,了解在 ''My_Table' ('key', 'email') VALUES ('42', 'user@emai' 附近使用的正确语法在第 1 行
我尝试将其包装sql"..."
为:sql"""..."""
,但这似乎没有什么区别。我可以在我的 MySQL 工作台 GUI 中很好地执行预期的语句。知道我的语法错误是什么吗?