2013-03-21 26 views
12

PreparedStatementを作成するときに、 '?'を使用します。 charsを設定されたパラメータに置き換えます。PreparedStatementのSQL文字列の表示方法は?

これらのパラメータを設定した後、最終的なSQL文字列を確認するにはどうすればよいですか?

+0

参照:[PreparedStatementのSQLを取得するにはどうすればよいですか?](http://stackoverflow.com/questions/2382532/how-can-i-get-the-sql-of-a-preparedstatement) – Reimeus

答えて

5

最も簡単な方法(どのJDBCドライバでも使用できます)はlog4jdbcです。これは、ドライバをラップするプロキシであり、SQLとそのパラメータを組み合わせて読み取り可能なSQL文字列を作成してログに記録し、SQLとパラメータを基になるドライバに渡します。

11

最終的なSQL文字列はありません。プレースホルダ付きのバージョンは、実際にサーバーに送信されるものです。準備されたステートメントでクエリを実行すると、データは完全に別々に送信されます。

文字列をプレースホルダでログに記録し、次に各データセットを個別に記録することができます。

String query = "SELECT a FROM b WHERE c = ?"; 

... 

pstmt.setString(1, "asd"); 
logSQL(query, "asd"); 

logSQLは、実際に"SELECT a FROM b WHERE c = 'asd'"が記録されます:それはあなたが望むかどう

あなたのコードは、実際のSQL文字列にログにそれらを組み合わせることができます。 Could be that someone has actually implemented this before...

関連する問題