Гость
Форумы / Android [игнор отключен] [закрыт для гостей] / Сохранение данный в SQLite при обновлении приложения в PlayMarket / 7 сообщений из 7, страница 1 из 1
01.11.2017, 18:15
    #39546318
AndroidNeedHelp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение данный в SQLite при обновлении приложения в PlayMarket
Здравствуйте, уважаемые! :)
Моё приложение использует стандартную базу SQLite из многих примеров по программированию на Android
Собственно есть класс DbHelper
DbHelper
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DbHelper extends SQLiteOpenHelper {

    // Имя файла базы данных
    private static final String DATABASE_NAME = "spline.db";
    // Версия базы данных.
    private static final int DATABASE_VERSION = 20;

    // Конструктор
    public DbHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    // Вызывается при создании базы данных
    @Override
    public void onCreate(SQLiteDatabase db) {
        String sSQL;

        // Таблица списка новых данных
        sSQL = "CREATE TABLE tblNewDataInfo ( "
                + " )";
        db.execSQL(sSQL);

        // Таблица загруженных данных
        sSQL = "CREATE TABLE tblNewData ( "
                + " )";
        db.execSQL(sSQL);

    }

    // Вызывается при обновлении схемы базы данных
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // Запишем в журнал
        Log.w("SQLite", "Обновляемся с версии " + oldVersion + " на версию " + newVersion);
        // Удаляем старую таблицу и создаём новую
        db.execSQL("DROP TABLE IF EXISTS tblNewDataInfo");
        db.execSQL("DROP TABLE IF EXISTS tblNewData");

        // Создаём новую таблицу
        onCreate(db);
    }
}

Ну а обращение к базе происходит как то так:
Код: java
1.
2.
3.
4.
5.
6.
        DbHelper mDbHelper = new DbHelper(this);
        SQLiteDatabase SplineDB = mDbHelper.getReadableDatabase();

        String query = "SELECT * FROM tblNewDataInfo";

        Cursor cursor = SplineDB.rawQuery(query, null);


Так вот, если приложение обновить, то данные, введённые пользователем приложения - исчезают... Это нормальное поведение, если версия приложения поменялась, но версия базы осталась прежней?
Код: javascript
1.
2.
    // Версия базы данных.
    private static final int DATABASE_VERSION = 20;
...
Рейтинг: 0 / 0
01.11.2017, 18:25
    #39546322
AndroidNeedHelp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение данный в SQLite при обновлении приложения в PlayMarket
Будет ли вызываться onUpgrade если DATABASE_VERSION так же остаётся = 20 ? :)
...
Рейтинг: 0 / 0
02.11.2017, 09:00
    #39546517
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение данный в SQLite при обновлении приложения в PlayMarket
AndroidNeedHelp
Код: java
1.
Log.w("SQLite", "Обновляемся с версии " + oldVersion + " на версию " + newVersion);


В логе-то есть что-то?

AndroidNeedHelpиз многих примеров по программированию на Android
В примерах тоже сразу с 20-ой версии начинают?
...
Рейтинг: 0 / 0
02.11.2017, 09:11
    #39546522
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение данный в SQLite при обновлении приложения в PlayMarket
И вопрос на засыпку: в примерах тоже при обновлении базы нет проверки с какой на какую версию???
...
Рейтинг: 0 / 0
02.11.2017, 13:21
    #39546691
AndroidNeedHelp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение данный в SQLite при обновлении приложения в PlayMarket
wadman ,

К сожалению, не знаю как смотреть лог уже на работающем приложении без AndroidStudio
А на телефоне, который подключается к студии для дебага невозможно установить приложение с плей-маркета. Говорит, оно уже есть, даже если его перед этим удалить
wadmanИ вопрос на засыпку: в примерах тоже при обновлении базы нет проверки с какой на какую версию??? Там такой проверки не было, и поэтому я подумал, что onUpgrade вызывается только если меняется DATABASE_VERSION
...
Рейтинг: 0 / 0
02.11.2017, 14:19
    #39546731
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение данный в SQLite при обновлении приложения в PlayMarket
AndroidNeedHelpТам такой проверки не было
В таком случае это очень странный источник. Потому что пользователь может пропустить некоторые версии приложения и поставить сразу хоть через 10 версий. И в onUpgrade должен понимать это. Для того и передаются текущая и необходимая версии базы.

То есть хоть с 1-ой на 5-ую, хоть со 2-ой... Примерно таким образом:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        ContentValues cv = new ContentValues();
        if (newVersion == 2) {
            cv.put("allow", -1);
            db.update(rule_table, cv, "allow = 0", null);
        }
        cv.clear();
        if (newVersion == 3) {
            db.execSQL("alter table "+message_table+" add column sended integer");
            db.execSQL("update "+message_table+" set sended = eventstamp");
        }
    }

...
Рейтинг: 0 / 0
02.11.2017, 22:53
    #39547054
AndroidNeedHelp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение данный в SQLite при обновлении приложения в PlayMarket
wadman ,

Спасибо большое!
Сделал проверку версий, выложил в PlayMarket, обновился - данные остались!
Ура! :)
...
Рейтинг: 0 / 0
Форумы / Android [игнор отключен] [закрыт для гостей] / Сохранение данный в SQLite при обновлении приложения в PlayMarket / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]