SQLException の汎用ロガーを作成していますが、PreparedStatement に渡されたパラメーターを取得したいのですが、どうすればよいですか? それらの数を取得できました。
ParameterMetaData metaData = query.getParameterMetaData();
parameterCount = metaData.getParameterCount();
SQLException の汎用ロガーを作成していますが、PreparedStatement に渡されたパラメーターを取得したいのですが、どうすればよいですか? それらの数を取得できました。
ParameterMetaData metaData = query.getParameterMetaData();
parameterCount = metaData.getParameterCount();
簡単な答え: できません。
長い答え: すべての JDBC ドライバーはパラメーター値をどこかに保持しますが、それらを取得する標準的な方法はありません。
デバッグまたは同様の目的でそれらを印刷する場合は、いくつかのオプションがあります。
パラメーターのコピーを保持し、それらを読み取るためのパブリック API を提供するパススルー JDBC ドライバー (基本として p6spy または log4jdbc を使用) を作成します。
Java Reflection API (Field.setAccessible(true)
はあなたの友人です) を使用して、JDBC ドライバーのプライベート データ構造を読み取ります。それが私の好みのアプローチです。パラメータをデコードできるDB固有の実装に委譲し、を介してパラメータを読み取ることができるファクトリがありますgetObject(int column)
。
バグ レポートを提出し、例外の改善を依頼してください。特にオラクルは、何が悪いのかを教えてくれるとなると、本当にけちです。