4

Jackcess を使用して次の SQL クエリと同等のものを実装する方法を誰か説明してもらえますか?

SELECT name FROM table WHERE id = '1'

SELECT name FROM table INNER JOIN table ON table.id = table2.id
4

1 に答える 1

3

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 つのfororwhileループ (上記と同様) を使用して 1 つのテーブルの関連する行を反復処理し、内部forまたはwhileループを使用して他の (関連する) テーブルの関連する行を反復処理することができます。Access で 2 つのテーブルに既存の「リレーションシップ」(別名「外部キー制約」) がある場合、Jackcess には、こちらで説明されている、役立つ可能性があるJoinerクラスがあります。


さらに支援が必要な場合は、自分でコードを書いてみてから、使用しようとしているコードとそれに関する特定の問題を示す新しい質問をする必要があります。

于 2014-04-17T20:07:28.060 に答える