0

次のようJDBCなコードがあり、gemfireXD を として使用していDBます。

入力のリストに対するプロシージャの実行を並列化しようとしています。プロシージャにパラメーターとして渡すリストのサイズは固定されておらず、以下のコードでクエリを実行した後に決定されます。このリストはサイズが大きすぎる場合があります。

コード:

 private static void executeProc (Connection cxn) throws SQLException {

          Statement stmt = null;
          try {
                 stmt = cxn.createStatement();

                 stmt.execute("select distinct field1 from Table1");
                 ResultSet rs = stmt.getResultSet();
                 List<String> fieldList = new ArrayList<String> ();
                 while (rs.next()) {
                       fieldList.add(rs.getString("field1"));
                 }
                 Array fieldArray = cxn.createArrayOf("VARCHAR", fieldList.toArray(new String[fieldList.size()]));
                 CallableStatement callableStmt = cxn.prepareCall("{CALL procedure1() ON TABLE Table1 WHERE field1 IN (?)}");
                 callableStmt.setArray(1, fieldArray);
                 callableStmt.execute();
          } catch (SQLException e) {
                 e.printStackTrace();
          }
   }

エラー: コードの実行中に以下のランタイム エラーが発生しました。

実装されていない機能: createArrayOf(String, Object[])

質問:

gemfireXD のドキュメントには、setArray メソッドを使用してリストを渡して Data Aware プロシージャを実行できることが記載されています。しかし、実際の API に取り組んでいるとき、setAaary() メソッドはリストではなく配列オブジェクトを想定しています。

GemfireXD のドキュメントでは、 setArray() メソッドをサポートするドキュメント (1.4.0) で、このようなプロシージャ コールの例を示しています。ドキュメントからの直接的な例は次のとおりです。

// GemFire XD データ対応プロシージャの呼び出し。

CallableStatement callableStmt = connection.prepareCall("{CALL order_credit_check() ON TABLE Orders WHERE customerID IN (?)}"); callableStmt.setArray(1, <-顧客 ID のリスト->);

prepareStatement.setArray を呼び出して、クエリでパラメータを設定するにはどうすればよいですか?

望ましい結果を達成するための他の実装アプローチを提案してください。

4

1 に答える 1