Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Гаджи
0 / 0 / 1
Регистрация: 07.02.2013
Сообщений: 56
#1

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

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

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

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

http://www.cyberforum.ru/android-dev/thread2039156.html
Знаю есть метод 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/uroki/vse-...-v-sqlite.html я читал, но не понял все равно как в моем случае все сделать.

Можете привести небольшой кусок кода для моего случая?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.12.2016, 14:52
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как обновить БД пользователей приложения (Программирование Android):

Разработка приложения для отображения местоположения пользователей на карте
Доброго времени суток! Собираюсь разработать приложение по типу &quot;Find my...

SQLiteDatabase как обновить таблицы?
Привет, снова я )) Данные в базу закачиваются из других классов, то есть всё...

Как обновить TextView с AsyncTask?
private class DownloadFilesTask extends AsyncTask&lt;String, Integer, Long&gt; { ...

Как обновить viewpager или listfragment?
Добрый день! Помогите пожалуйста разобраться в следующем вопросе. У меня есть...

Как обновить приложение в play.google.com?
Вопрос касается https://play.google.com Пробую обновить приложение, которое...

16
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,072
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
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,072
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
Pablito
2645 / 2127 / 726
Регистрация: 12.05.2014
Сообщений: 7,434
Завершенные тесты: 1
07.12.2016, 16:03 #6
самое то
главное что бы это была транзакция, а не просто 1000 вставок в цикле
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,072
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
Pablito
2645 / 2127 / 726
Регистрация: 12.05.2014
Сообщений: 7,434
Завершенные тесты: 1
07.12.2016, 16:17 #9
я не силен с БД и могу ошибаться, но мне казалось, что повышать версию бд надо только если изменилась ее структура - поля, типы полей
но никак не содержимое
0
Гаджи
0 / 0 / 1
Регистрация: 07.02.2013
Сообщений: 56
07.12.2016, 16:21  [ТС] #10
Я тоже не силен. Я запускал первый раз программу с БД все работает, затем добавил новые записи в БД запустил этих данных нет в БД, поднял версию БД тоже нет. А чтобы они появились и в БД пользователей нужно ведь в методе onUpgrade написать что они добавляются в БД у тех юзеров у которых версия БД ниже чем текущая. А вот это и хотел реализовать на основе старой версии БД и новой версии БД.
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,072
07.12.2016, 20:26 #11
Цитата Сообщение от Паблито Посмотреть сообщение
но мне казалось, что повышать версию бд надо только если изменилась ее структура - поля, типы полей
Неправильно казалось.
Цитата Сообщение от Гаджи Посмотреть сообщение
Просто хотел в БД добавлять записи
Я выше уже написал, что надо делать.
0
Pablito
2645 / 2127 / 726
Регистрация: 12.05.2014
Сообщений: 7,434
Завершенные тесты: 1
07.12.2016, 20:31 #12
а можно пример когда структура базы (таблиц, полей, длин, типов и т.д.) осталась прежней, но необходимо поднимать версию и никак иначе?
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,072
07.12.2016, 21:25 #13
Вот он и есть пример у ТС, когда нужно добавить новые записи, но не потерять записи сделанные пользователем.
0
Гаджи
0 / 0 / 1
Регистрация: 07.02.2013
Сообщений: 56
09.12.2016, 09:00  [ТС] #14
Мне как-то предлагали такой вариант. Если требуется оставить записи у юзеров без изменений, но добавить еще и новые то сделать так: Новую БД из assets скопировать к юзеру под новым названием, оттуда вытащить все нужные записи и записать в БД юзера, и удалить временную БД. Но не получилось у меня это реализовать.
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,072
09.12.2016, 10:48 #15
Цитата Сообщение от Гаджи Посмотреть сообщение
Но не получилось
Соболезную. У меня больше нет вариантов для вас.
0
Bend3r
149 / 136 / 35
Регистрация: 29.07.2012
Сообщений: 709
09.12.2016, 18:44 #16
Вот такая логика, не знаю удастся ли вам ее реализовать.
1. начинаем транзакцию
2. создаю копию таблицы с обновленными значениями по структуре так и по записям.
3. копируем предыдущие значения через запрос insert и select одновременно со старой таблицы в новую (http://www.w3schools.com/sql/sql_insert_into_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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.12.2016, 15:45
Привет! Вот еще темы с решениями:

Как обновить значение в ячейке, используя условие?
как будет выглядеть условие в андроид на SqLite используя примерный синтаксис:...

Sqllite база как правильно обновить запись
Делаю так db.update(DataBaseConstants.USER_TABLE_NAME, cv,...

Как обновить данные ViewPagera отдельного фрагмента?
Есть пейджер с тремя страницами. Меняется лишь содержимое третьей страницы....

Как обновить экран из потока запущенного в сервисе
Люди, совершенно сбит с толку - двое суток читаю и пытаюсь понять - хандлеры,...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru