Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 1
Регистрация: 07.02.2013
Сообщений: 56
1

Как обновить БД пользователей приложения

07.12.2016, 14:52. Показов 727. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день. Есть приложение в маркете использующее готовую БД SQlite. Данные в БД юзер может менять по желанию или добавлять новые записи. Я как разработчик обновил БД и добавил в нее новые записи (скажем 10 записей, а может и 1000). Требуется новые записи добавить в БД пользователей, так чтобы их данные не стерлись и не изменились. Как можно это реализовать подскажите пожалуйста в виде кода если можно. Потому что уже 3-4 дня копаюсь не пойму как сделать.

БД содержит одну таблицу slovar с полями _id, word, translation, type, favorites.

Знаю есть метод onUpgrade, где это все можно сделать, но как сделать не пойму. Единственное что я сделал это в методе onUpgrade() в БД добавил новую таблицу, и в курсор вытащил все записи из бд следующим образом, а дальше не знаю как быть

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    if (oldVersion < 2) {
        db.beginTransaction();
        try {
            String query = "SELECT * from " + DictionaryContract.DictionaryEntry.TABLE_NAME;
            Cursor cr = db.rawQuery(query, null);
            db.execSQL("CREATE TABLE slovar2 (_id INTEGER, word TEXT NOT NULL, translation TEXT NOT NULL, type INTEGER NOT NULL, " +
                    "favorites INTEGER NOT NULL, PRIMARY KEY (_id, word, translation, type, favorites))");
        } finally {
            db.endTransaction();
        }
    }
}
Урок http://startandroid.ru/ru/urok... qlite.html я читал, но не понял все равно как в моем случае все сделать.

Можете привести небольшой кусок кода для моего случая?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.12.2016, 14:52
Ответы с готовыми решениями:

Как получить пользователей приложения?
Добрый день подскажите можно ли получить список пользователей приложения vk и как это сделать вроде...

Как выгрузить список пользователей из приложения?
Доброго дня форумчане. Есть приложение Mom life...

Как сделать параметры приложения доступными для всех пользователей сервера
Всем привет. Подскажите как сделать параметры приложения доступными для всех пользователей...

Как объединить воедино два приложения, написанных для разных групп пользователей
Здравствуйте, есть вопросик :) Вот смотрите есть 2 группы пользователей, например, студент и...

16
912 / 560 / 88
Регистрация: 13.02.2014
Сообщений: 2,081
07.12.2016, 15:02 2
БД находится в приложении или на сервере?

Добавлено через 3 минуты
Используйте запрос insert into... и все дела.
0
0 / 0 / 1
Регистрация: 07.02.2013
Сообщений: 56
07.12.2016, 15:13  [ТС] 3
В приложении в assets. А как можно обращаться к старой версии БД и к новой версии БД? Вы не могли бы привести небольшой кусок кода демонстрирующий это?
0
912 / 560 / 88
Регистрация: 13.02.2014
Сообщений: 2,081
07.12.2016, 15:51 4
Зачем вам одновременно 2 версии БД?
Для добавления записей при установке пользователем новой версии приложения нужно:
1. Увеличить номер версии БД
2. В onUpgrade если версия < 2 кодим
Java
1
2
String query = "INSERT INTO slovar (word, translation) VALUES('"слово1"', '"слово2"');";
db.execSQL(query);
0
0 / 0 / 1
Регистрация: 07.02.2013
Сообщений: 56
07.12.2016, 15:55  [ТС] 5
Это да, а если новых записей будет скажем 1000 штук? Писать каждый раз insert into для каждого слова не то же ведь. Поэтому хочу чтобы действовало и для случая когда много записей добавляю
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
07.12.2016, 16:03 6
самое то
главное что бы это была транзакция, а не просто 1000 вставок в цикле
0
912 / 560 / 88
Регистрация: 13.02.2014
Сообщений: 2,081
07.12.2016, 16:06 7
Цитата Сообщение от Гаджи Посмотреть сообщение
Писать каждый раз insert into для каждого слова не то же ведь
Цикл слышали такое слово? Берете в переменную слово и формируете query. А откуда брать слово это уже дело техники.
0
0 / 0 / 1
Регистрация: 07.02.2013
Сообщений: 56
07.12.2016, 16:13  [ТС] 8
знаю я про циклы. Можно в файл записать слова к примеру так: слово$перевод$значение_type$значение_favorites, брать из этого файла инфо и вставлять в БД. Думал может есть еще какой-то более лучший способ.

Добавлено через 1 минуту
Просто хотел в БД добавлять записи и чтобы на ее основе обновлялась БД пользователей не теряя и не меняя данные которые есть у юзеров, а добавлять новые данные. Чтобы не париться и в дальнейшем повышать только версию БД.
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
07.12.2016, 16:17 9
я не силен с БД и могу ошибаться, но мне казалось, что повышать версию бд надо только если изменилась ее структура - поля, типы полей
но никак не содержимое
0
0 / 0 / 1
Регистрация: 07.02.2013
Сообщений: 56
07.12.2016, 16:21  [ТС] 10
Я тоже не силен. Я запускал первый раз программу с БД все работает, затем добавил новые записи в БД запустил этих данных нет в БД, поднял версию БД тоже нет. А чтобы они появились и в БД пользователей нужно ведь в методе onUpgrade написать что они добавляются в БД у тех юзеров у которых версия БД ниже чем текущая. А вот это и хотел реализовать на основе старой версии БД и новой версии БД.
0
912 / 560 / 88
Регистрация: 13.02.2014
Сообщений: 2,081
07.12.2016, 20:26 11
Цитата Сообщение от Паблито Посмотреть сообщение
но мне казалось, что повышать версию бд надо только если изменилась ее структура - поля, типы полей
Неправильно казалось.
Цитата Сообщение от Гаджи Посмотреть сообщение
Просто хотел в БД добавлять записи
Я выше уже написал, что надо делать.
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
07.12.2016, 20:31 12
а можно пример когда структура базы (таблиц, полей, длин, типов и т.д.) осталась прежней, но необходимо поднимать версию и никак иначе?
0
912 / 560 / 88
Регистрация: 13.02.2014
Сообщений: 2,081
07.12.2016, 21:25 13
Вот он и есть пример у ТС, когда нужно добавить новые записи, но не потерять записи сделанные пользователем.
0
0 / 0 / 1
Регистрация: 07.02.2013
Сообщений: 56
09.12.2016, 09:00  [ТС] 14
Мне как-то предлагали такой вариант. Если требуется оставить записи у юзеров без изменений, но добавить еще и новые то сделать так: Новую БД из assets скопировать к юзеру под новым названием, оттуда вытащить все нужные записи и записать в БД юзера, и удалить временную БД. Но не получилось у меня это реализовать.
0
912 / 560 / 88
Регистрация: 13.02.2014
Сообщений: 2,081
09.12.2016, 10:48 15
Цитата Сообщение от Гаджи Посмотреть сообщение
Но не получилось
Соболезную. У меня больше нет вариантов для вас.
0
150 / 137 / 35
Регистрация: 29.07.2012
Сообщений: 709
09.12.2016, 18:44 16
Вот такая логика, не знаю удастся ли вам ее реализовать.
1. начинаем транзакцию
2. создаю копию таблицы с обновленными значениями по структуре так и по записям.
3. копируем предыдущие значения через запрос insert и select одновременно со старой таблицы в новую (http://www.w3schools.com/sql/s... select.asp)
4. удаляем старую таблицу чтобы освободить имя
5. переименовываем новую таблицу в старое имя таблицы
6. конец транзакции
0
0 / 0 / 1
Регистрация: 07.02.2013
Сообщений: 56
10.12.2016, 15:45  [ТС] 17
Спасибо.
0
10.12.2016, 15:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.12.2016, 15:45
Помогаю со студенческими работами здесь

Вручную обновить приложения samsung j3
Есть телефон samsung j3, я в google play поставил обновление встроенных приложений &quot;только через...

Ошибка приложения у одного из пользователей
Здрасти)) Мне вчера один из пользователей описался что у него проблема... Хотя уверяет что NET...

Права доступа пользователей приложения
Всем привет! Есть приложение-клиент для работы с информацией, содержащейся в БД. Нужно...

Статистика пользователей - как идентифицировать пользователей с одинаковыми именами
есть 2 таблицы users, и item, в таблице item есть поле username, задача такова что бы вывести...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru