7

SQLクエリを受け取り、他の場所で処理するためにResultSetを返すJava関数を作成したいと思います。接続が閉じられるとResultSetが無効になるため、これを行うことはできません。

ぐるぐる回って、治療法のように見える何かを持っている非常に古い(2004)OReillyの記事を見つけました:CachedRowSet。ResultSetをドロップするだけで、CachedRowSetがデータを保存し、接続を閉じて、返されたCachedRowSetを使用して他の場所でデータを操作できるようにします。

この記事では、SunによるCachedRowSetの実装について言及していますが、これはどこにも見つからないようです。

最新のjavadocs(Java 1.5以降の場合)には、同じ名前の「CachedRowSet」が含まれているようです。これは、ResultSetデータの単なるホルダーではありません。その「CachedRowSet」は、接続やその他すべての取得からデータベース処理全体を実行しているようです。

その「CachedRowSet」は、以前の記事で説明されているものと同じですか?

以前の記事のように、簡単なものが欲しいのですが。接続が閉じられた後に処理するためにResultSetをプロップするもの。

そのような動物はいますか?

ありがとう

4

3 に答える 3

5

CachedRowSetは、標準の Java インターフェースです。Sun は参照実装を作成し、Sun/Oracle JDK にはそれが含まれています。別の JDK を使用している場合、その実装または別の実装が利用できる場合と利用できない場合があります。

が既にある場合は、 メソッドを使用してそこから をResultSet埋めることができます。CachedRowSetpopulate

Java 7 を使用できるほど先進的な考えを持っている場合は、メソッドを持つCachedRowSetを使用して、移植可能な方法でインスタンスを取得できます。aから aを取得できます(もちろん!)。RowSetFactorycreateCachedRowSetRowSetFactoryRowSetProvider

于 2012-06-22T16:41:43.593 に答える
-1

javax.sql.rowset.CachedRowSet単なるインターフェースです。Sun / Oracle独自の実装がありますが、サポートされていないため、使用するのは危険です。

最近のほとんどのコードは、「pojosへの変換」モデルに従います。

于 2012-04-26T21:58:49.997 に答える
-1

CachedRowSet が提供するすべての関数を必要とせずにデータを転送したいだけの場合は、結果セットのデータをリストのリストに入れるだけの方がよいでしょう。

   List<Object> list = new ArrayList<Object>();
   ResultSet rs = stmt.executeQuery("select * from myTable");
   while(rs.next()) {
         List<Object> row = new ArrayList<Object>();
         row.add(rs.getObject(1));
         row.add(rs.getObject(2));
         row.add(rs.getObject(3));
         //And so on, or you can use the ResultSetMetaData to determine the number of columns
         list.add(row);
   }
   rs.close();

完了したら、そのリスト オブジェクトを任意の場所に送信し、それを繰り返し処理してデータを取得できます。

于 2012-06-22T15:15:54.073 に答える