Jackcess を使用して次の SQL クエリと同等のものを実装する方法を誰か説明してもらえますか?
SELECT name FROM table WHERE id = '1'
SELECT name FROM table INNER JOIN table ON table.id = table2.id
Re: 最初のクエリ (SELECT ... FROM tableName WHERE ...)
最も単純な形式では、Jackcess のメイン ページの「サンプル コード」の下にある「特定の列の値を持つ行の検索」の例を使用できます。つまり、
Table table = DatabaseBuilder.open(new File("my.mdb")).getTable("MyTable");
Row row = CursorBuilder.findRow(table, Collections.singletonMap("a", "foo"));
if(row != null) {
System.out.println("Found row where 'a' == 'foo': " + row);
} else {
System.out.println("Could not find row where 'a' == 'foo'");
}
複数の一致する行をループするには、次のようなことができます
Table table = DatabaseBuilder.open(new File("my.mdb")).getTable("MyTable");
Cursor cursor = CursorBuilder.createCursor(table);
while (cursor.findNextRow(Collections.singletonMap("a", "foo"))) {
Row row = cursor.getCurrentRow();
System.out.println(String.format(
"a='%s', SomeFieldName='%s'.",
row.get("a"),
row.get("SomeFieldName")));
}
または、@jtahlborn が以下のコメントで示唆しているように、
Table table = DatabaseBuilder.open(new File("my.mdb")).getTable("MyTable");
Cursor cursor = CursorBuilder.createCursor(table);
for (Row row : cursor.newIterable().addMatchPattern("a", "foo")) {
System.out.println(String.format(
"a='%s', SomeFieldName='%s'.",
row.get("a"),
row.get("SomeFieldName")));
}
Re: 2 番目のクエリ (SELECT ... FROM table1 INNER JOIN table2 ON ...)
1 つのfor
orwhile
ループ (上記と同様) を使用して 1 つのテーブルの関連する行を反復処理し、内部for
またはwhile
ループを使用して他の (関連する) テーブルの関連する行を反復処理することができます。Access で 2 つのテーブルに既存の「リレーションシップ」(別名「外部キー制約」) がある場合、Jackcess には、こちらで説明されている、役立つ可能性があるJoinerクラスがあります。