IN引数のみのストアド・プロシージャ呼出をする為には?
JDBC PreparedStatementオブジェクトを使用する。通常、以下の手順のヘルパーメソッドを用意し、呼出部分の簡素化を実施する。
- 渡される文のためのJDBC PreparedStatementを作成し、PL/SQLのbegin...endブロック内にラップする。
- バインド変数が渡された場合は、値のループ処理を実施する。
- 各バインド変数の値を文に設定する。(JDBCのバインド変数APIは1から始まる番号付けを使用するため、0から始まるforループのインデックス変数にコードで1を加えていることに注意する。)
- 文を実行する。
- 文をクローズする。
【Helper】
protected void callStoredProcedure(String stmt, Object[] bindVars) {
PreparedStatement st = null;
try {
// 1. JDBC PreparedStatement を生成
st = getDBTransaction().createPreparedStatement("begin "+stmt+";end;",0);
if (bindVars != null) {
// 2. バインド変数が渡された場合は、値を取得する。
for (int z = 0; z < bindVars.length; z++) {
// 3. PreparedStatementにパラメータをセットする。
st.setObject(z + 1, bindVars[z]);
}
}
// 4. ステートメントを実行。
st.executeUpdate();
}
catch (SQLException e) {
throw new JboException(e);
}
finally {
if (st != null) {
try {
// 5. ステートメントをクローズ。
st.close();
}
catch (SQLException e) {}
}
}
}
// In StoredProcTestModuleImpl.java
public void callProcWithThreeArgs(Number n, Date d, String v) {
callStoredProcedure("dev_sample.proc_with_three_args(?,?,?)", new Object[]{n,d,v});
}
0 件のコメント:
コメントを投稿