Scala 如何查看Anorm生成的SQL?

Scala 如何查看Anorm生成的SQL?,scala,anorm,Scala,Anorm,我正在尝试执行一系列insert语句,然后返回LAST\u insert\u ID()的值。但是我得到一个错误,说我的SQL语法无效 有谁能告诉我如何检查和查看MySQL发送的最终生成的SQL是什么样子的吗?Anorm并不是真的生成SQL,是您生成的。但是有一种方法可以记录通过线路发送到控制台的确切查询(在语句准备好之后,假设您在游戏中使用anrom) 假设您使用的是一个名为default(默认配置)的数据库,请将以下内容添加到application.conf: db.default.logS

我正在尝试执行一系列insert语句,然后返回
LAST\u insert\u ID()
的值。但是我得到一个错误,说我的SQL语法无效


有谁能告诉我如何检查和查看MySQL发送的最终生成的SQL是什么样子的吗?

Anorm并不是真的生成SQL,是您生成的。但是有一种方法可以记录通过线路发送到控制台的确切查询(在语句准备好之后,假设您在游戏中使用anrom)

假设您使用的是一个名为
default
(默认配置)的数据库,请将以下内容添加到
application.conf

 db.default.logStatements=true
然后可以将以下内容保存到
conf/logger.xml

<configuration>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%-5level - %msg%n</pattern>
        </encoder>
    </appender>

    <logger name="com.jolbox.bonecp" level="NONE">
        <appender-ref ref="STDOUT" />
    </logger>

    <logger name="play" level="INFO">
        <appender-ref ref="STDOUT" />
    </logger>

    <logger name="application" level="NONE">
        <appender-ref ref="STDOUT" />
    </logger> 

</configuration>

%-5级-%msg%n
文件中的关键行与BoneCP日志记录相关,但我们也希望为应用程序和播放日志记录程序添加行,这样我们就不会弄乱默认日志记录。

在Anorm中缺少任何日志记录非常糟糕

如果生成的SQL无效,并且从驱动程序中获得神秘的异常,那么我建议在此处某处设置断点(
anrom.SimpleSql
):

def preparedStatement(连接:连接,getGeneratedKeys:Boolean=false)={
隐式val res=StatementResource
资源管理{
val(psql,vs):(String,Seq[(Int,ParameterValue)]=Sql.preparequaly(Sql.stmt.tokens,Sql.paramsini.lorder,params,0,new-StringBuilder(),List.empty[(Int,ParameterValue)]。get
val stmt=if(getGeneratedKeys)connection.prepareStatement(psql,java.sql.Statement.RETURN_GENERATED_KEYS)else connection.prepareStatement(psql)
sql.timeout.foreach(stmt.setQueryTimeout(389;))
vs foreach{case(i,v)=>v.set(stmt,i+1)}
stmt
}

和log
psql

Anorm不是SQL生成的。它准备参数,如
java.SQL.PreparedStatement
。您可以通过复制传递给
SQL(…)的字符串来检查SQL语句
并手动将参数占位符替换为测试值,这样您就可以手动执行该语句。也就是说,如果您想从Anorm获取堆栈跟踪,那么在当前Anorm版本(play 2.5)中,使用Anorm测试您的应用程序应该是“db.default.logSql=true”