Android извлекает несколько элементов из базы данных sqlite

#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. Курсор следует рассматривать как контейнер для результатов запроса к базе данных, хотя я не уверен, содержит ли он сами данные. Если ваш запрос к базе данных возвращает несколько строк, вы будете ссылаться на них с помощью курсора. Ознакомьтесь с этой статьей, чтобы получить лучшее представление.

В любом случае, вам придется использовать какой-то цикл для перебора курсора для каждой строки результирующего набора.