Полный список
— используем методы update и delete с указанием условия
На прошлом уроке мы разобрали, как вставить запись, считать все записи из таблицы и очистить таблицу. Теперь посмотрим, как обновить и удалить конкретную запись.
Новый проект создавать не будем, используем P0341_SimpleSQLite с прошлого урока. Немного поменяем экран, добавим поле для ввода ID и кнопки для обновления и удаления.
По нажатию кнопки Update мы будем читать содержимое полей Name и Email, и обновлять запись в таблице, для которой id = значению из поля ID. По нажатию кнопки Delete будем удалять запись из таблицы по id = значению из поля ID. Экран получился, конечно, не самый лучший с точки зрения эргономики и юзабилити, но у нас тут не кружок юных дизайнеров, а серьезное изучение БД.
Подредактируем MainActivity.java. Добавим описание и определение новых экранных элементов, присвоение обработчиков для кнопок.
(Обращайте внимание только на выделенные строки)
Теперь дополним реализацию onClick:
(Добавляете только выделенный текст)
Мы добавляем переменную id, пишем в нее значение поля etID. В switch добавляем две новые ветки:
btnUpd – обновление записи в mytable. Проверяем, что значение id не пустое, заполняем cv данными для апдейта и обновляем запись. Для этого используется метод update. На вход ему подается имя таблицы, заполненный ContentValues с значениями для обновления, строка условия (Where) и массив аргументов для строки условия. В строке условия я использовал знак ?. При запросе к БД вместо этого знака будет подставлено значение из массива аргументов, в нашем случае это – значение переменной id. Если знаков ? в строке условия несколько, то им будут сопоставлены значения из массива по порядку. Метод update возвращает нам кол-во обновленных записей, которое мы выводим в лог.
btnDel – удаление записи из mytable. Проверяем, что id не пустое и вызываем метод delete. На вход передаем имя таблицы, строку условия и массив аргументов для условия. Метод delete возвращает кол-во удаленных строк, которое мы выводим в лог.
Обратите внимание, что условия и для update и для delete у меня одинаковые, а именно id = значение из поля etID. Но реализовал я их немного по-разному. Для update использовал символ ? в строке условия и массив аргументов. А для delete вставил значение сразу в строку условия. Таким образом, я просто показал способы формирования условия. А вы уже используйте тот, что больше нравится или лучше в конкретной ситуации.
Все сохраним и запустим. На прошлом уроке мы добавляли пару записей, но потом их удалили. Так что я буду добавлять снова. Добавлю пару записей, нажму Read, вижу в логе:
ID = 3, name = Ivan Petrov, email = ipetrov @abc.com
ID = 4, name = Anton Sidorov, email = asidorov @def.com
Теперь попробуем обновить запись с ID=3. Для этого вводим 3 в поле ID и новые данные в поля Name и Email:
Жмем Update, смотрим лог:
— Update mytable: —
updated rows count = 1
обновилась одна запись, все верно.
Нажмем Read и убедимся в этом. Лог:
ID = 3, name = Petr Ivanov, email = pivanov @abc.com
ID = 4, name = Anton Sidorov, email = asidorov @def.com
Запись действительно обновилась.
Теперь давайте удалим запись с ID = 4. Вводим 4 в поле ID
Жмем Delete, смотрим лог:
— Delete from mytable: —
deleted rows count = 1
одна запись удалена.
Жмем Read, смотрим лог:
— Rows in mytable: —
ID = 3, name = Petr Ivanov, email = pivanov @abc.com
осталась одна запись.
Если попробовать удалить запись с пустым полем ID, то ничего не будет, т.к. мы реализовали проверку. Если же попробовать удалить запись с несуществующим ID, то метод delete вернет 0. Т.е. ничего не было удалено, т.к. не нашлось записей для удаления.
Теперь вы умеете читать, вставлять, удалять и изменять записи в SQLite.
Полный код MainActivity.java:
На следующем уроке:
— подробно разбираем метод чтения данных query
— используем сортировку, группировку, условия, having
Присоединяйтесь к нам в Telegram:
— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.
— в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование
— ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня
— новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме
Источник
Как удалить все элементы из SQLite в Android
Я хотел бы сделать приложение, в котором пользователь нажимает кнопку, и база данных SQLite очищается. Вот что я пробовал до сих пор:
Что я делаю не так?
Ваш вызов delete () верен. Вы получили доступную для записи базу данных? Ниже приведен пример метода, использующего delete:
Db.delete (TABLE_NAME, null, null); Является правильным синтаксисом для удаления всех строк в таблице. Но я думаю, что вы получили бы имя таблицы напрямую, не заключая ее в двойные кавычки. Попробуйте это
Это может помочь 🙂
Фактически другим способом я сделал это, чтобы DROP таблицы, а затем просто вызвать метод onCreate для SQLiteDatabase . Я не знаю, какой из них наиболее эффективный « Delete или « Delete потому что я действительно не углублялся в то, насколько эффективен каждый метод, но он отлично работает для меня, потому что в моей первоначальной базе данных у меня есть некоторые значения по умолчанию, и поэтому, когда я вызываю onCreate для базы данных У меня есть некоторые методы PUT . Это сохраняет репликацию кода. (Вместо того, чтобы делать delete, а затем puts, я получаю многоцелевую функцию из моей функции onCreate ).
Я называю его reset . Таким образом, вам просто нужно сделать db.reset() а затем значения по умолчанию добавляются в onCreate после создания ваших таблиц.
Используйте этот код для очистки всего содержимого базы данных.
Для меня классическая инструкция mysql:
Работал отлично. удачи 🙂
Ps .: без start / endtransaction или closeDatabase …
Одна вещь, которую вы могли бы попробовать при разработке на устройстве:
Настройки >> приложения >> (имя вашего приложения) >> Хранение >> очистить кеш и очистить данные
Очищая данные приложения и кеш приложения, вы также уничтожаете базу данных sql.
Источник
Как удалить все элементы из SQLite в Android
Я хотел бы создать приложение, в котором пользователь нажимает кнопку, а база данных SQLite очищается. Вот что я пробовал до сих пор:
Что я делаю не так?
9 ответов
Ваш вызов delete () правильный. Вы получили доступную для записи базу данных? Вот пример метода с использованием удаления:
Эта работа для меня:
Для меня классический оператор mysql:
Работал отлично. удачи 🙂
ps: без start / endtransaction или closeDatabase…
Используйте этот код:
Вы можете добавить его класс DatabaseHandler, это полный исходный код:
Одна вещь, которую вы можете попробовать при разработке на устройстве:
Настройки >> приложения >> (имя вашего приложения) >> Хранилище >> очистить кеш и очистить данные
Очищая данные приложения и кеш приложения, вы также очищаете базу данных sql.
На самом деле я сделал это другим способом: DROP таблицы, а затем просто вызвать метод onCreate для SQLiteDatabase . Я не знаю, какой из них наиболее эффективен: Delete или Drop , потому что я особо не разбирался в том, насколько эффективен каждый метод, но он отлично работает для меня, потому что в моей исходной базе данных у меня есть некоторые значения по умолчанию значения установлены, и поэтому, когда я вызываю метод onCreate для базы данных, у меня также есть несколько методов PUT . Это экономит репликацию кода. (вместо того, чтобы выполнять удаление, а затем помещать, я получаю многоцелевой от моей функции onCreate ).
Я называю это reset . Так что вам просто нужно сделать db.reset() , а затем значения по умолчанию добавляются в onCreate после того, как вы создадите свои таблицы.
Используйте этот код для очистки всего содержимого базы данных
Источник