0

Javaでは、データベースで送信/クエリされるクエリを出力して、クエリが例外をスローしたときのエラーを確認できるようにします。

Oracle Exception IDを理解し、コード内で問題が発生した場所を正確に照合するのではなく、問題を正確に特定すると便利です。助けてください。

PreparedStatement ps = conn.prepareStatement("SELECT * FROM EMPLOYEES where EMPNAME=?");
ps.setString(1, "HULK");
ps.executeQuery();

理想的には、syso(ps)またはsyso(ps.getquery)を実行したいので、出力は次のようになります。

SELECT * FROM EMPLOYEES WHERE EMPNAME='HULK'
また
SELECT * FROM EMPLOYEES WHERE EMPNAME=<HASHCODE OF THE OBJECT YOU ARE TRYING TO BIND>

4

2 に答える 2

1

SQL 呼び出しをログに記録できるLog4JDBCという興味深いものに出くわしました。まだ使用する機会はありませんが、ログ レベルを変更して SQL 呼び出しをログ ファイルに取得できるのは素晴らしいアイデアだと思いました。

これはあなたが要求した以上のものですが、そこに捨てる価値があるかもしれないと思いました.

于 2012-08-23T14:30:58.333 に答える
0

これはすでにここで回答されていると思います。

簡単な答え: toString() メソッドまたは PrepareStatement を出力して、バインド変数が値に置き換えられたクエリを確認します。

BUT:それは実装者に依存します。すべての JDBC ドライバーがこの機能を追加するわけではありません。

特定のドライバーがこれに準拠していない場合、唯一の回避策は、バインド変数を使用する代わりに、値を連結して SQL を作成することです (バインド変数を使用すると RDBMS が提供するパフォーマンス上の利点が失われます)。

しかし、このためには、ものを文字列などに変換する必要があります.

連結された SQL は最もエラーが発生しやすく、最も印刷とチェックが必要な SQL であることがわかっているため、これは逆説的です。

于 2012-08-23T14:26:18.420 に答える