76

JdbcTemplate と NamedParameterJdbcTemplate の素晴らしさについて学んでいます。表示される内容は気に入っていますが、最終的に実行される基になる SQL を確認する簡単な方法はありますか? デバッグ目的でこれを見たいと思います(たとえば、結果のSQLを外部ツールでデバッグするため)。

4

8 に答える 8

63

Springのドキュメントには、DEBUG レベルでログに記録されると記載されています。

このクラスによって発行されたすべての SQLは、テンプレート インスタンスの完全修飾クラス名(通常は JdbcTemplate ですが、JdbcTemplate クラスのカスタム サブクラスを使用している場合は異なる場合があります) に対応するカテゴリの下のDEBUGレベルでログに記録されます。

XML 用語では、ロガーを次のように構成する必要があります。

<category name="org.springframework.jdbc.core.JdbcTemplate">
    <priority value="debug" />
</category>

ただし、この主題は 1 か月前にここで議論されており、 Hibernateのように作業を開始するのは簡単ではないか、期待される情報が返されませんでした: Spring JDBC は log4j で SQL をログに記録していません。この記事に従ってSpringに統合することもできます。

于 2009-12-20T19:05:19.460 に答える
43

これは、org.springframework.jdbc-3.0.6.RELEASE.jar で機能します。これはSpringのドキュメントのどこにも見つかりませんでした(たぶん私は怠け者かもしれません)が、(試行錯誤して)TRACEレベルが魔法のように機能することがわかりました。

log4j-1.2.15 を slf4j (1.6.4) およびプロパティ ファイルと共に使用して、log4j を構成しています。

log4j.logger.org.springframework.jdbc.core = TRACE

これにより、SQL ステートメントとバインドされたパラメーターの両方が次のように表示されます。

Executing prepared SQL statement [select HEADLINE_TEXT, NEWS_DATE_TIME from MY_TABLE where PRODUCT_KEY = ? and NEWS_DATE_TIME between ? and ? order by NEWS_DATE_TIME]
Setting SQL statement parameter value: column index 1, parameter value [aaa], value class [java.lang.String], SQL type unknown
Setting SQL statement parameter value: column index 2, parameter value [Thu Oct 11 08:00:00 CEST 2012], value class [java.util.Date], SQL type unknown
Setting SQL statement parameter value: column index 3, parameter value [Thu Oct 11 08:00:10 CEST 2012], value class [java.util.Date], SQL type unknown

SQL の型が不明なのかどうかはわかりませんが、ここでは無視できると思います

SQL だけの場合 (つまり、バインドされたパラメーター値に関心がない場合)DEBUGで十分です。

于 2013-03-20T09:49:17.210 に答える
9

パラメータ値は TRACE レベルに出力されるようです。これは私のために働いた:

log4j.logger.org.springframework.jdbc.core.JdbcTemplate=DEBUG, file
log4j.logger.org.springframework.jdbc.core.StatementCreatorUtils=TRACE, file

コンソール出力:

02:40:56,519 TRACE http-bio-8080-exec-13 core.StatementCreatorUtils:206 - Setting SQL statement parameter value: column index 1, parameter value [Tue May 31 14:00:00 CEST 2005], value class [java.util.Date], SQL type unknown
02:40:56,528 TRACE http-bio-8080-exec-13 core.StatementCreatorUtils:206 - Setting SQL statement parameter value: column index 2, parameter value [61], value class [java.lang.Integer], SQL type unknown
02:40:56,528 TRACE http-bio-8080-exec-13 core.StatementCreatorUtils:206 - Setting SQL statement parameter value: column index 3, parameter value [80], value class [java.lang.Integer], SQL type unknown
于 2014-01-05T01:44:36.097 に答える