- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
为了避免 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")))
控制台打印输出结果为:
The sql statement is: INSERT INTO ? (?, ?) VALUES (?, ?)
The parameters are: List(My_Table, key, email, 42, user@email.com)
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''My_Table' ('key', 'email') VALUES ('42', 'user@emai' at line 1 java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''My_Table' ('key', 'email') VALUES ('42', 'user@emai' at line 1
我尝试将 sql"..."
包装为这样:sql"""..."""
,但这似乎并不有所作为。我可以在 MySQL 工作台 GUI 中很好地执行预期的语句。知道我的语法错误是什么吗?
最佳答案
根据 @scaisEdge 的提示,ScalikeJDBC 在使用其语法时似乎总是在任何参数化值周围放置单引号。从这里来看 - https://github.com/scalikejdbc/scalikejdbc/issues/320 - 这是一个已知的问题。
使用 MySQL INSERT
语句(或其他),您的表名或列值可能没有单引号,但允许使用反引号。
您可以使用他们的SQLSyntax.createUnsafely(str:String)
方法,或者,如果我想像上面那样执行此操作,而不是使用 sql"..."
,我可以使用旧的方式 SQL(s"INSERT INTO ${msg.tableName} (${msg.columns.mkString(",")})")
注意 - 我相信这两者都会让您容易受到注入(inject)攻击。因为,对我来说,这是一个本地 API,无论使用它,你都必须拥有数据库的用户名和密码,所以我将使用 createUnsafely
做事的方式,用一点正则表达式“清洁剂”来解决一点不优雅的想法:
def depositMessage(msg: MySQLInsertMessage): Unit = {
NamedDB('MySQLMsgDepositor) localTx { implicit session =>
val unsafeSQLRegex = "[`'\"]".r
val table = SQLSyntax.createUnsafely(s"`${unsafeSQLRegex.replaceAllIn(msg.tableName, "")}`")
val columns = SQLSyntax.createUnsafely(msg.columns.map(value => unsafeSQLRegex.replaceAllIn(value, "")).mkString("`", "`, `", "`"))
val sqlStmt = sql"INSERT INTO $table ($columns) VALUES (${msg.values})".update().apply()
}
}
}
关于mysql - 使用 SQL 插值的 ScalikeJDBC 出现未知 SQL 语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49541710/
谁能给我一个示例,说明如何在具有动态值的 scalikejdbc 中使用 like 子句。我使用了以下查询,但没有用 sql"select * from tables_list where lowe
我正在尝试批量插入 100 个表(我听说这是与 mySQL 一起使用的最佳大小),我使用 scala 2.10.4 和 sbt 0.13.6,我使用的 jdbc 框架是 scalikejdbc 和 H
我正在尝试使用 scalikeJDBC 连接到 postgres 我有以下错误信息: An exception or error caused a run to abort: No suitable
我使用 scalikejdbc 2.0.1 和 playframework 2.3。我按照一对多 http://scalikejdbc.org/documentation/one-to-x.html
我正在玩 ScalikeJdbc 库。我想从 PostgreSQL 数据库中检索数据。我得到的错误对我来说很奇怪。即使我手动配置 CP: val poolSettings = new Connecti
我有一个模型,如下所示。 case class House ( id: Int, name: String, cityId: Int, leaseInterval: I
我尝试使用 ScalikeJDBC 访问 PostgreSQL 9.4 中的数组。动态链接库: create table itab ( code varchar primary key
据我从 Scalikejdbc 的文档中了解到,如果我想要进行交易,我需要通过 session 。像这样: class FooBarService { val fooDao = new F
所以我有这个 sql(更大查询的一部分): from Person p left join ForeignCredentials fc on fc.person_id = p.id and fc.ty
我正在尝试将 Postgres 的 RETURNING 与 ScalikeJDBC 一起使用(请参阅 https://github.com/scalikejdbc/scalikejdbc/issues
尝试使用 ScalikeJDBC 和 SQLite。根据提供的示例编写一个简单的代码: import scalikejdbc._, SQLInterpolation._ object Test ext
为了避免 DRY,我尝试创建一个带有变量列名称和数据的 sql INSERT 语句,以通过 ScalikeJDBC 的 sql 插值填充这些列: case class MySQLInsertMessa
我是一名优秀的程序员,十分优秀!