1. ホーム
  2. java

[解決済み] java.sql.PreparedStatementからクエリを取得する [重複]。

2022-04-20 20:41:48

質問

<余談
この質問には、すでにここで回答があります :
クローズド 5年前 .

私のコードでは java.sql.PreparedStatement .

次に、私は setString() メソッドを使用して、準備された文のワイルドカードを入力します。

の前に最終的なクエリを取得する(そして印刷する)方法はありますか? executeQuery() メソッドが呼び出され、クエリが実行されるのでしょうか? デバッグ用に欲しいだけなのですが。

どのように解決するのですか?

これはJDBC APIコントラクトのどこにも定義されていませんが、もしあなたが ラッキー を呼び出すだけで、当該JDBCドライバは完全なSQLを返すかもしれません。 PreparedStatement#toString() . すなわち

System.out.println(preparedStatement);

私の経験では、現在そうなっているのは少なくとも PostgreSQL 8.x と MySQL 5.x の JDBC ドライバです。

JDBCドライバがサポートしていない場合、最善の方法は、ステートメントラッパーを使用して setXxx() メソッドにSQL文字列を入力し、最終的に toString() を記録した情報を元に これを実現する既存のライブラリは P6Spy . 一方、JDBCドライバの開発チームに機能強化のリクエストを提出し、希望の toString() という動作もあります。