私のアプリケーションには、この形式の関数がいくつかあります。
public long generatedCatId(String name,int age, CallableStatement statement) throws SQLException
{
statement.setString(1,name);
statement.setInt(2,age);
statement.registerOutParameter(3, Types.NUMERIC);
statement.execute();
return statement.getLong(3);
}
私がやりたいのは、Enum
許可されたすべてのCallableStatement
オブジェクトを含むホワイトリストを作成することです。これにより、列挙型内の値のセットを単純に含むことができます。私が抱えている問題は、CallableStatement
オブジェクトなしではオブジェクトを作成できないことConnection
です。この制限を回避する方法はありますか? Statement
自動化されたプロセスの一部として 1 日に何十億回も実行されるため、接続オブジェクトを渡したり、繰り返し再コンパイルしたりしたくありません。最後に、ORM ツールは使用しません。
アップデート
私が実行する任意のステートメントの例:
CallableStatement statement = conn.prepareCallable("{Call insert_new_cat(?,?,?)}";
SQL: insert into cat(id,name,age)
values(cat_sequence.nextval,name,age)
returning id;
CallableStatement statement = conn.prepareCallable("{Call update_cat(?,?)}";
SQL: update cat
set age = age
where id = id;
2 回目の更新
私がしていることについて、いくつかの混乱があるようです。プログラムの流れは次のようになります。
プロセス A は、上記で宣言された関数を呼び出し、コンパイルされたステートメントを提供します。以下の例:
Connection conn = DriverManager.getConnection("foo");
CallableStatement statement = conn.prepareCall("insert_new_cat");
for(Cat currentCat : CatList)
{
generateCatId(currentCat.name(),currentCat.age(), statement);
}
conn.commit();
上記がステートメントの 1 つのコミットと 1 つのコンパイルまたは準備の両方であることに注意してください。そのステートメントを、関数内で比較できる列挙型またはその他の最終的なデータ構造の一部にしたいと考えていgenerateCatId
ます。