Эквиваленты Jackcess для простых операторов SQL SELECT

Может кто-нибудь объяснить, как я мог бы использовать Jackcess для реализации эквивалента следующих запросов SQL?

SELECT name FROM table WHERE id = '1'

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

1 ответ

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: ваш второй запрос (SELECT ... FROM table1 INNER JOIN table2 ON ...)

Вы могли бы использовать один for или же while цикл (аналогичный вышеописанному) для итерации по соответствующим строкам в одной таблице и использования внутреннего for или же while цикл, чтобы перебрать связанные строки в другой (связанной) таблице. Если две таблицы имеют существующее "Отношение" в Access (он же "ограничение внешнего ключа"), у Джекесса есть класс Joiner, который может оказаться полезным, обсуждается здесь.


Если вам требуется дополнительная помощь, вам нужно будет попытаться написать какой-то код для себя, а затем задать новый вопрос с указанием кода, который вы пытаетесь использовать, и конкретной проблемы, с которой вы столкнулись.

Другие вопросы по тегам