Эквиваленты 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, который может оказаться полезным, обсуждается здесь.
Если вам требуется дополнительная помощь, вам нужно будет попытаться написать какой-то код для себя, а затем задать новый вопрос с указанием кода, который вы пытаетесь использовать, и конкретной проблемы, с которой вы столкнулись.