13

PreparedStatementを作成するときは、「?」を使用します。その後、文字は設定されたパラメータに置き換えられます。

これらのパラメータが設定された後、最終的なSQL文字列をどのように確認できますか?

4

2 に答える 2

11

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

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

必要に応じて、コードでログ内のそれらを実際のSQL文字列に結合できます。

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

...

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

logSQLその後、実際にログに記録されます"SELECT a FROM b WHERE c = 'asd'"誰かが実際にこれを以前に実装したことがあるかもしれません...

于 2013-03-21T16:28:23.717 に答える
5

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

于 2013-03-21T16:33:58.890 に答える