powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Android [игнор отключен] [закрыт для гостей] / Сохранение данный в SQLite при обновлении приложения в PlayMarket
7 сообщений из 7, страница 1 из 1
Сохранение данный в SQLite при обновлении приложения в PlayMarket
    #39546318
AndroidNeedHelp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, уважаемые! :)
Моё приложение использует стандартную базу 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
Сохранение данный в SQLite при обновлении приложения в PlayMarket
    #39546322
AndroidNeedHelp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Будет ли вызываться onUpgrade если DATABASE_VERSION так же остаётся = 20 ? :)
...
Рейтинг: 0 / 0
Сохранение данный в SQLite при обновлении приложения в PlayMarket
    #39546517
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndroidNeedHelp
Код: java
1.
Log.w("SQLite", "Обновляемся с версии " + oldVersion + " на версию " + newVersion);


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

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

К сожалению, не знаю как смотреть лог уже на работающем приложении без AndroidStudio
А на телефоне, который подключается к студии для дебага невозможно установить приложение с плей-маркета. Говорит, оно уже есть, даже если его перед этим удалить
wadmanИ вопрос на засыпку: в примерах тоже при обновлении базы нет проверки с какой на какую версию??? Там такой проверки не было, и поэтому я подумал, что onUpgrade вызывается только если меняется DATABASE_VERSION
...
Рейтинг: 0 / 0
Сохранение данный в SQLite при обновлении приложения в PlayMarket
    #39546731
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Сохранение данный в SQLite при обновлении приложения в PlayMarket
    #39547054
AndroidNeedHelp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman ,

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


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