Java >> Java チュートリアル >  >> Tag >> Jdbc

Java での JDBC RowSet インターフェイスの概要

1.概要

この記事では、JDBC RowSet を確認します。 インターフェイス。 JDBC RowSet オブジェクトは、結果セットよりも適応性が高く使いやすいスタイルで表形式のデータを保持します。

Oracle は 5 つの RowSet を定義しています RowSet を最も頻繁に使用するためのインターフェイス:

  • JdbcRowSet
  • CachedRowSet
  • WebRowSet
  • JoinRowSet
  • FilteredRowSet

このチュートリアルでは、これらの RowSet の使用方法を確認します。

2. JdbcRowSet

JdbcRowSet から始めましょう – Connection を渡すことで単純に作成します JdbcRowSetImpl へのオブジェクト :

JdbcRowSet jdbcRS = new JdbcRowSetImpl(conn);
jdbcRS.setType(ResultSet.TYPE_SCROLL_INSENSITIVE);
String sql = "SELECT * FROM customers";
jdbcRS.setCommand(sql);
jdbcRS.execute();
jdbcRS.addRowSetListener(new ExampleListener());
while (jdbcRS.next()) {
    // each call to next, generates a cursorMoved event
    System.out.println("id = " + jdbcRS.getString(1));
    System.out.println("name = " + jdbcRS.getString(2));
}

上記の例では、 jdbcRs メソッド setCommand で SQL ステートメントを定義するまで、データは含まれていませんでした 次に、execute メソッドを実行しました .

また、イベント処理を実行するために、RowSetListener を追加した方法にも注目してください。 JdbcRowSet に入れます。

JdbcRowSet 他の 4 つの RowSet とは異なります 実装 - 常にデータベースに接続されているため このため、ResultSet に最も似ています。 オブジェクト。

3. CachedRowSet

CachedRowSet オブジェクトは、データ ソースに接続しなくても操作できるため、一意です。これを「切断された RowSet」と呼びます オブジェクト」.

CachedRowSet データベースに保存されたデータの代わりに独自のデータを操作できるように、データをメモリにキャッシュするという事実から、その名前が付けられました。

CachedRowSet として インターフェースは、切断されたすべての RowSet オブジェクトのスーパー インターフェースです。 、以下で確認するコードは WebRowSe にも適用できます t、JoinRowSet 、または FilteredRowSe 同様に:

CachedRowSet crs = new CachedRowSetImpl();
crs.setUsername(username);
crs.setPassword(password);
crs.setUrl(url);
crs.setCommand(sql);
crs.execute();
crs.addRowSetListener(new ExampleListener());
while (crs.next()) {
    if (crs.getInt("id") == 1) {
        System.out.println("CRS found customer1 and will remove the record.");
        crs.deleteRow();
        break;
    }
}

4. WebRowSet

次に、WebRowSet を見てみましょう .

CachedRowSet の機能を提供することに加えて、これもユニークです。 XML ドキュメントに自分自身を書き込むことができます また、その XML ドキュメントを読み取って、それ自体を WebRowSet に変換することもできます :

WebRowSet wrs = new WebRowSetImpl();
wrs.setUsername(username);
wrs.setPassword(password);
wrs.setUrl(url);
wrs.setCommand(sql);
wrs.execute();
FileOutputStream ostream = new FileOutputStream("customers.xml");
wrs.writeXml(ostream);

writeXml の使用 メソッド、WebRowSet の現在の状態を書き込みます オブジェクトを XML ドキュメントに追加します。

writeXml を渡すことによって OutputStream メソッド オブジェクトでは、文字ではなくバイトで書き込みます。これは、あらゆる形式のデータを処理するのに非常に役立ちます.

5. 行セットに参加

行セットに参加 SQL JOIN を作成しましょう RowSet の間 これらがメモリ内にある場合のオブジェクト。 1 つまたは複数の接続を作成する必要があるオーバーヘッドを節約できるため、これは重要です。

CachedRowSetImpl customers = new CachedRowSetImpl();
// configuration of settings for CachedRowSet
CachedRowSetImpl associates = new CachedRowSetImpl();
// configuration of settings for this CachedRowSet            
JoinRowSet jrs = new JoinRowSetImpl();
jrs.addRowSet(customers,ID);
jrs.addRowSet(associates,ID);

RowSet ごとに JoinRowSet に追加されたオブジェクト オブジェクトには、SQL JOIN の列である一致列が必要です。 「id」を指定します addRowSet で メソッド。

列名を使用する代わりに、列番号を使用することもできたことに注意してください。

6. FilteredRowSet

最後に、FilteredRowSet 表示される行数を減らしましょう RowSet で 目的に関連するデータのみを扱うことができるようにします。

Predicate の実装を使用して、データを「フィルタリング」する方法を決定します インターフェース:

public class FilterExample implements Predicate {
    
    private Pattern pattern;
    
    public FilterExample(String regexQuery) {
        if (regexQuery != null && !regexQuery.isEmpty()) {
            pattern = Pattern.compile(regexQuery);
        }
    }
 
    public boolean evaluate(RowSet rs) {
        try {
            if (!rs.isAfterLast()) {
                String name = rs.getString("name");
                System.out.println(String.format(
                  "Searching for pattern '%s' in %s", pattern.toString(),
                  name));
                Matcher matcher = pattern.matcher(name);
                return matcher.matches();
            } else
                return false;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
    
    // methods for handling errors
}

次に、そのフィルタを FilteredRowSet に適用します オブジェクト:

RowSetFactory rsf = RowSetProvider.newFactory();
FilteredRowSet frs = rsf.createFilteredRowSet();
frs.setCommand("select * from customers");
frs.execute(conn);
frs.setFilter(new FilterExample("^[A-C].*"));
            
ResultSetMetaData rsmd = frs.getMetaData();
int columncount = rsmd.getColumnCount();
while (frs.next()) {
    for (int i = 1; i <= columncount; i++) {
        System.out.println(
          rsmd.getColumnLabel(i)
          + " = "
          + frs.getObject(i) + " ");
        }
    }

7.結論

この簡単なチュートリアルでは、RowSet の 5 つの標準実装について説明しました JDK で利用可能なインターフェース。

各実装の構成について説明し、それらの違いについて説明しました。

指摘したように、RowSet の 1 つのみ 実装は接続された RowSet です オブジェクト – JdbcRowSet .他の 4 つは切断されています RowSet オブジェクト。

そして、いつものように、この記事の完全なコードは Github で見つけることができます。


Java タグ