1

私はJavaベースのプロジェクトに取り組んでおり、次の方法で実装されています

  • キーを整数として、値を文字列の配列リストとして持つハッシュマップを取るクラス(A、B、C、D....)がいくつかあります。arraylist 内のすべての文字列要素は、Oracle SQL クエリ (INSERT または UPDATE) です。
  • クラス(A、B、C、D....)のこれらのメソッドは、Map をループします。特定のキーのすべての SQL クエリは、JDBC ステートメント ( **stmt.addBatch(String)**) を使用してバッチに追加されます。一意のキーごとに、個別のバッチが作成されて実行されます。
  • さまざまな INSERT および UPDATE クエリを配置するために、このマップと文字列の配列リストにデータを入力する作業をしている多くのクラス(X、Y、Z...)があります。

ここで、いくつかのキーに Oracle プロシージャ コールを追加する必要があるため、それぞれのキーの String Arraylist に追加する必要があります。

プロシージャを呼び出すために次の文字列を追加しようとしましたが、誰もうまくいかないようです。

1. EXEC INSERT_AUTONUMBER_DATA(......)

2. BEGIN INSERT_AUTONUMBER_DATA(........) END;

他の領域に影響を与える可能性があるため、コードの多くを変更したくありません。

バッチに Callable ステートメントを追加することはできますが、そのためには、バッチの準備を担当するすべてのメソッドとクラスを変更する必要がありますが、これは私のプロジェクトでは約 15 です (プロジェクトの設計はあまり良くありません)。ステートメントの代わりに呼び出し可能なステートメントを準備するために、プロシージャ呼び出しを識別する条件を記述する必要があります。

バッチを実行するクラスを変更せずに、それを行う他の方法はありますか?

4

1 に答える 1

1

次の呼び出しステートメントを試して、バッチに追加しました。

CALL INSERT_AUTONUMBER_DATA(......)

この文字列は、次のロジックを持つステートメントに追加され、機能します。

Statement s = conn.createStatement();
s.addBatch("CALL INSERT_AUTONUMBER_DATA(......)");
s.addBatch(.....);
.
.
.

s.executeBatch();

したがって、ここでは、バッチで java.sql.Statement を介してプロシージャを呼び出すことができます

于 2012-10-19T12:09:15.077 に答える