21

SQLException の汎用ロガーを作成していますが、PreparedStatement に渡されたパラメーターを取得したいのですが、どうすればよいですか? それらの数を取得できました。

ParameterMetaData metaData = query.getParameterMetaData();
parameterCount = metaData.getParameterCount();
4

3 に答える 3

22

簡単な答え: できません。

長い答え: すべての JDBC ドライバーはパラメーター値をどこかに保持しますが、それらを取得する標準的な方法はありません。

デバッグまたは同様の目的でそれらを印刷する場合は、いくつかのオプションがあります。

  1. パラメーターのコピーを保持し、それらを読み取るためのパブリック API を提供するパススルー JDBC ドライバー (基本として p6spy または log4jdbc を使用) を作成します。

  2. Java Reflection API (Field.setAccessible(true)はあなたの友人です) を使用して、JDBC ドライバーのプライベート データ構造を読み取ります。それが私の好みのアプローチです。パラメータをデコードできるDB固有の実装に委譲し、を介してパラメータを読み取ることができるファクトリがありますgetObject(int column)

  3. バグ レポートを提出し、例外の改善を依頼してください。特にオラクルは、何が悪いのかを教えてくれるとなると、本当にけちです。

于 2011-01-14T13:34:52.013 に答える