アプリに多数のストアド プロシージャ コールがあり、callable ステートメントを使用しています。ストアド プロシージャに渡されるパラメーターをデバッグする必要がある場合があります。簡単な方法はありませんが、エンティティ オブジェクトから取得したすべての値を出力するコードを記述します。
そのため、呼び出し可能なステートメントの署名と、実行後の呼び出し可能なステートメントオブジェクト、および実行されたSQLとデバッグ用のログに出力する汎用関数を作成しようとしていました。次のコードを書きましたが、switch case 1 の cs.getString で "Parameter type not valid" という SQL 例外がスローされます。
ここで、cs メタデータから取得したパラメータ タイプは 1 であり、javadocによると、定数 1 は CHAR 用であり、Java の文字列にマップする必要があります。このストアド プロシージャの実際の設定パラメータも String を使用しており、正常に動作するのに、なぜ getString がこの例外で失敗するのでしょうか?
AS400ドライバーを使用しています。
StringBuffer sb = new StringBuffer("{ call ").append(storProcName)
.append(" (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) }");
cs = connection.prepareCall(sb.toString());
// Get and set all parameters
cs.executeUpdate();
ParameterMetaData paramd = cs.getParameterMetaData();
int index, type;
for (int i = 1; i < paramd.getParameterCount(); i++) {
type = paramd.getParameterType(i);
index = sb.indexOf("?");
if (paramd.getParameterMode(i) == ParameterMetaData.parameterModeIn) {
switch (type) {
case 1:
sb = sb.replace(index, index + 1, "'" + cs.getString(i)
+ "'");
break;
}
}
}