#java #android #sql #sqlite #data-structures
#java #Android #sql #sqlite #структуры данных
Вопрос:
Я хотел обновить (извлечь и, возможно, отредактировать) несколько элементов в базе данных SQLite без использования цикла for / while / dowhile
Возможно ли это с помощью курсора? Я хотел бы ограничить поиск отдельных элементов в таблице
Существует ли какой-либо сложный объект данных Android, в который я могу выгрузить все результаты SQL-запроса, которые затем я мог бы проанализировать для цикла
Я слышал о Parceable
и сериализуемых объектах, но это своего рода то, для чего я использую базу данных.
В настоящее время у меня есть методы для вызова элементов по отдельной строке. И я мог бы поместить этот метод в цикл for, или я мог бы поместить запрос курсора в цикл for, НО я не хочу делать так много обращений.
public String fetchDay(long rowId) throws SQLException {
Cursor mCursor =
mapDb.query(true, DAY_TABLE, new String[] {KEY_ROWID, KEY_DAY}, KEY_ROWID "=" String.valueOf(rowId), null,
null, null, null, null);
if (mCursor != null) {
mCursor.moveToFirst();
}
String result = mCursor.getString(mCursor.getColumnIndex(KEY_DAY));
mCursor.close();
return resu<
}
Как бы мне получить все элементы этой таблицы и сохранить их в сложном объекте без зацикливания
Понимание приветствуется
Ответ №1:
Вы можете изменить свой запрос, чтобы возвращать более одной строки, используя что-то вроде:
KEY_ROWID " >= " String.valueOf(firstRowId) " AND " KEY_ROWID " <= " String.valueOf(lastRowId)
в качестве вашего предложения where.
При этом курсор вернет диапазон строк, и затем вы можете выполнить итерацию по нему, используя цикл while, например, так:
mCursor.moveToFirst();
while (!mCursor.isAfterLast()) {
results.add(mCursor.getString(mCursor.getColumnIndex(KEY_DAY)));
mCursor.moveToNext();
}
С результатами, являющимися List<String>
Обратите внимание, что цикл while, используемый в этом решении, намного дешевле, чем многократный запрос таблицы, поскольку он выполняет итерацию объекта Cursor, который находится в памяти, вместо выполнения нескольких операций ввода-вывода
Комментарии:
1. отлично, как бы мне также обновить несколько элементов в базе данных? Я сталкиваюсь с той же дилеммой. Я могу опубликовать новый вопрос, я свяжу его с вами
Ответ №2:
«Существует ли какой-нибудь сложный объект данных Android, в который я могу выгрузить все результаты SQL-запроса, которые затем я мог бы проанализировать для цикла?»
Да, и это курсор. Он представляет результирующий набор, возвращаемый запросом к базе данных, аналогичный результирующему набору JDBC. Курсор следует рассматривать как контейнер для результатов запроса к базе данных, хотя я не уверен, содержит ли он сами данные. Если ваш запрос к базе данных возвращает несколько строк, вы будете ссылаться на них с помощью курсора. Ознакомьтесь с этой статьей, чтобы получить лучшее представление.
В любом случае, вам придется использовать какой-то цикл для перебора курсора для каждой строки результирующего набора.