JavaのJDBC RowSetインターフェイスの概要
1. 概要
この記事では、JDBCRowSetインターフェース. A JDBC RowSet object holds tabular data in a style that makes it more adaptable and simpler to use than a result set.を確認します
Oracleは、RowSet:を最も頻繁に使用するために5つの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));
}
上記の例では、メソッドsetCommandを使用してSQLステートメントを定義し、メソッドexecuteを実行するまで、jdbcRsにはデータが含まれていませんでした。
また、イベント処理を実行するために、JdbcRowSet.にRowSetListenerを追加した方法にも注目してください。
JdbcRowSetは、他の4つのRowSet実装とは異なります。これは、it’s always connected to the databaseであり、このため、ResultSetオブジェクトに最も類似しているためです。
3. CachedRowSet
CachedRowSetオブジェクトは、データソースに接続しなくても動作できるため、一意です。 これを「切断されたRowSetオブジェクト」と呼びます。
CachedRowSetは、データベースに格納されているデータではなく、独自のデータを操作できるようにデータをメモリにキャッシュするため、この名前が付けられています。
CachedRowSetインターフェースはsuper interface for all disconnected RowSet objectsであるため、以下で確認するコードは、WebRowSet、JoinRowSet、またはFilteredRowSetにも同様に適用できます。
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オブジェクト、it can write itself to an XML documentの機能を提供することに加えて、その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. JoinRowSet
JoinRowSetを使用すると、RowSetオブジェクトがメモリ内にあるときに、それらの間にSQLJOINを作成できます。 これは、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);
JoinRowSetオブジェクトに追加された各RowSetオブジェクトには、SQLJOINの基になる一致列が必要なため、addRowSetに“id”を指定します。方法。
列名を使用するのではなく、列番号を使用することもできます。
6. FilteredRowSet
最後に、RowSetオブジェクト内のFilteredRowSetlets us cut down the number of rows that are visibleを使用して、実行していることに関連するデータのみを処理できるようにします。
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. 結論
このクイックチュートリアルでは、JDKで使用可能なRowSetインターフェイスの5つの標準実装について説明しました。
各実装の構成について説明し、それらの違いについて言及しました。
指摘したように、RowSet実装の1つだけが、接続されたRowSetオブジェクトであるJdbcRowSetです。 他の4つは切断されたRowSetオブジェクトです。
そして、いつものように、この記事の完全なコードはover on Githubにあります。