Scala 如何在Play framework中打印填写的Anorm SQL语句

Scala 如何在Play framework中打印填写的Anorm SQL语句,scala,playframework,anorm,playframework-2.4,Scala,Playframework,Anorm,Playframework 2.4,如何打印将要使用Anorm运行的SQL状态 范例 SQL(s"SELECT $terms FROM $PERSON_TABLE WHERE name = {name}").on("name" -> "Bill") 印刷给了我这个 SimpleSql(anorm.SqlQuery$$anon$1@1197b8ab,Map(name -> ParameterValue(Bill)),<function1>,false) 我不想像这样使用插值 s"SELECT $terms

如何打印将要使用Anorm运行的SQL状态

范例

SQL(s"SELECT $terms FROM $PERSON_TABLE WHERE name = {name}").on("name" -> "Bill")
印刷给了我这个

SimpleSql(anorm.SqlQuery$$anon$1@1197b8ab,Map(name -> ParameterValue(Bill)),<function1>,false)
我不想像这样使用插值

s"SELECT $terms FROM $PERSON_TABLE WHERE name = $name"
我需要能够看到所有的转义字符和什么是包装在'和什么是包装在'

使用:

播放2.4.1-Scala

谢谢

Adam

您可以使用来自Acolyte my framework的

导入acolyte.jdbc.acolytesl AcolyteDSL.debuging{implicit con=> //调试内部的任何JDBC执行 SQLSELECT*来自测试,其中id=$id //将打印为准备的stmt }
sql.getFilledStatementconnection,在标准anorm API中为true,似乎工作得相当好

请使用准备好的语句尝试以下操作:

val yourStmt=sqls从$PERSON_表中选择$terms,其中name={name}.onname->Bill val pstmt=yourStmt.preparedStatementcon pstmt.foreachp=>printlnp
在anorm 2.5.0中使用插值字符串为我工作

首先,您不应该在SQL语句中使用字符串插值,但anorm interpolation SQLSELECT$terms FROM$table,其中name=$name使用简单的$处理参数,而使用$see anorm doc处理普通concat。那么Anorm 2.5.0就出局了。@cchantep使用字符串插值有什么问题?我理解用户不使用它来阻止注入,但是当被插入的部分是我在代码中提供的东西时,使用它是错误的。为什么使用标准插入可以与一些准备好的语句一起工作,而Anorm一个总是工作的?在2.4之前,它是通过配置,但是bonecp已经被取代了。我还没有使用新的方法,但是有一个线索。在这里也检查一下响应,有没有办法让它打印填好的语句?它用?,?打印出来?然后将它们与值和类型一起列出。谢谢你让我知道2.5.0。升级到修复了我的一个问题,其中查询被插入,然后顺序混淆。我仍然接受,因为它解决了我的问题。谢谢。助手打印列表或参数。每个人?只需考虑在相应位置指示的参数明细名称+类型。而不是Anorm插值SQL。。引入SQL注入风险。这不起作用。preparedStatement需要的参数比简单的连接更多。我不明白应该在额外的参数中添加什么,因为整个方法似乎没有文档记录。getFilledStatement似乎不再存在?
s"SELECT $terms FROM $PERSON_TABLE WHERE name = $name"