为了避免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()
}
}
当我把这个叫做:
sql语句是:INSERT INTO?(?,?)值(?,?)
参数为:List(My_Table,key,email,42,user@email.com)
您的SQL语法中有一个错误;检查与您的MySQL server版本对应的手册,查找使用“my_table”('key','email')值('42','user@emai'在第1行java.SQL.sqlsyntaxerroreXception:您的SQL语法中有错误;检查与您的MySQL server版本对应的手册,查找使用“my_table”('key','email')值('42','user@emai'在第1行的正确语法
我尝试将sql“...”
包装成这样:sql“...”
,但这似乎没有什么不同。我可以在我的MySQL工作台GUI中很好地执行预期的语句。知道我的语法错误是什么吗?
来自@Scaisedge的提示,ScalikeJDBC在使用其语法时,似乎总是在任何参数化的值周围加上单引号。从这里来看--https://github.com/scalikejdbc/scalikejdbc/issues/320--这是一个已知的问题。
使用MySQLinsert
语句(或其他语句),表名或列值周围可能没有单引号,但允许有反勾。
您可以使用他们的sqlsyntax.createunsafety(str:string)
方法,或者,如果我想像上面那样做,我可以使用sql“...”
,而不是使用sql(“插入到${msg.tableName}(${msg.columns.mkstring(”,“)})的旧方法)
注意--我相信这两个都让你容易受到注射攻击。因为对我来说,这是一个本地API,无论使用它,都必须有DB的用户名和密码,所以我将使用createunsafety
的方式来处理事情,并使用一些regex“cleaner”来解决一些不优雅的问题:
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()
}
}
}
我正在运行以下SQL语法: 但不管用。我得到了这个错误: 错误1064(42000):您的SQL语法中有错误;查看与您的MySQL server版本相对应的手册,了解第1行“DISTINCT >”Number of Employees“FROM Hours”附近使用的正确语法 你能告诉我我在哪里做错了吗?对不起,我对MySQL和数据库不熟悉。
请查看与您的MySQL server版本相对应的手册,以便在
我是一个编程新手,有一个相当复杂的问题。我希望有人知道如何解决以下问题: 和科斯: 我只想要几个变量(这就是为什么我不能做全选)。我还认为我不应该用内部连接来编写广泛的查询,所以我没有这样做(它适用于大多数查询,除了列表变量)。 这是ContactRepository的相关部分: 如果有什么重要的东西我应该在这里补充,请告诉我。提前道谢! 编辑:应用程序运行时,只有当我尝试在运行时访问特定的数据时
我试图从表中获取数据,并基于一个列添加名为'Expension'的新列,尽管在网上查看后,我的语法没有被接受。 代码: 错误:#1064-您的SQL语法有错误;请查看与您的MySQL server版本相对应的手册,了解在第2行“case WHEN product_price>10000”和“expairing”WHEN product_price<'附近使用的正确语法
问题内容: 我有一个MySQL命令: 当我运行它时,我得到一个错误: 问题答案: 是不是 您应该使用SQL工具来可视化可能出现的错误,例如 MySQL Workbench 。
我的SpringBoot应用程序的编译无法创建数据库。 原因:java。sql。SqlSyntaxerErrorException:您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以获取在第1行的“read bit,releaseDate date,primary key(id))engine=InnoDB”附近使用的正确语法 根据堆栈,它来自我的“释放日期”日期或我的类“书籍”中的“