Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.62
NOSC
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
#1

SQLite обновление базы данных - Программирование Android

03.02.2014, 08:50. Просмотров 1652. Ответов 2
Метки нет (Все метки)

Всем привет.

Использую базу данных в приложении. При обновлении программы нужно обновить базу данных в том числе, база данных хранится в архиве в папке assets/database
У меня есть класс DataBase:
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
public class DataBase extends SQLiteAssetHelper {
 
    private static final String DATABASE_NAME = "ups.db";
    private static final int DATABASE_VERSION = 2;
 
    public DataBase(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
 
        // you can use an alternate constructor to specify a database location 
        // (such as a folder on the sd card)
        // you must ensure that this folder is available and you have permission
        // to write to it
        //super(context, DATABASE_NAME, context.getExternalFilesDir(null).getAbsolutePath(), null, DATABASE_VERSION);
 
    }
 
    public Cursor getEmployees() {
 
        SQLiteDatabase db = getReadableDatabase();
        SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
 
        String [] sqlSelect = {"0 _id", "art"}; 
        String sqlTables = "ups";
 
        qb.setTables(sqlTables);
        Cursor c = qb.query(db, sqlSelect, null, null,
                null, null, null);
 
        c.moveToFirst();
        return c;
 
    }
 
}
Если оставлю строчку
Java
1
private static final int DATABASE_VERSION = 1;
База данных не обновляется, если поставлю
Java
1
private static final int DATABASE_VERSION = 2;
то выдает ошибку:
Кликните здесь для просмотра всего текста
02-03 10:44:48.456: I/SQLiteAssetHelper(32627): successfully opened database ups.db
02-03 10:44:48.456: W/SQLiteAssetHelper(32627): Upgrading database ups.db from version 1 to 2...
02-03 10:44:48.456: W/SQLiteAssetHelper(32627): missing database upgrade script: databases/ups.db_upgrade_1-2.sql
02-03 10:44:48.456: E/SQLiteAssetHelper(32627): no upgrade script path from 1 to 2
02-03 10:44:48.456: E/SQLiteAssetHelper(32627): Couldn't open ups.db for writing (will try read-only):
02-03 10:44:48.456: E/SQLiteAssetHelper(32627): com.readystatesoftware.sqliteasset.SQLiteAssetHelper$SQLiteAssetException: no upgrade script path from 1 to 2
02-03 10:44:48.456: E/SQLiteAssetHelper(32627): at com.readystatesoftware.sqliteasset.SQLiteAssetHelper.onUpgrade(SQLiteAssetHelper.java:314)
02-03 10:44:48.456: E/SQLiteAssetHelper(32627): at com.readystatesoftware.sqliteasset.SQLiteAssetHelper.getWritableDatabase(SQLiteAssetHelper.java:197)
02-03 10:44:48.456: E/SQLiteAssetHelper(32627): at com.readystatesoftware.sqliteasset.SQLiteAssetHelper.getReadableDatabase(SQLiteAssetHelper.java:254)
02-03 10:44:48.456: E/SQLiteAssetHelper(32627): at ru.nag.nagupscalc.DataBase.getEmployees(DataBase.java:28)
02-03 10:44:48.456: E/SQLiteAssetHelper(32627): at ru.nag.nagupscalc.Calc.onCreate(Calc.java:45)
02-03 10:44:48.456: E/SQLiteAssetHelper(32627): at android.app.Activity.performCreate(Activity.java:5104)
02-03 10:44:48.456: E/SQLiteAssetHelper(32627): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
02-03 10:44:48.456: E/SQLiteAssetHelper(32627): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2261)
02-03 10:44:48.456: E/SQLiteAssetHelper(32627): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2357)
02-03 10:44:48.456: E/SQLiteAssetHelper(32627): at android.app.ActivityThread.access$600(ActivityThread.java:153)
02-03 10:44:48.456: E/SQLiteAssetHelper(32627): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1247)
02-03 10:44:48.456: E/SQLiteAssetHelper(32627): at android.os.Handler.dispatchMessage(Handler.java:99)
02-03 10:44:48.456: E/SQLiteAssetHelper(32627): at android.os.Looper.loop(Looper.java:137)
02-03 10:44:48.456: E/SQLiteAssetHelper(32627): at android.app.ActivityThread.main(ActivityThread.java:5226)
02-03 10:44:48.456: E/SQLiteAssetHelper(32627): at java.lang.reflect.Method.invokeNative(Native Method)
02-03 10:44:48.456: E/SQLiteAssetHelper(32627): at java.lang.reflect.Method.invoke(Method.java:511)
02-03 10:44:48.456: E/SQLiteAssetHelper(32627): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
02-03 10:44:48.456: E/SQLiteAssetHelper(32627): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
02-03 10:44:48.456: E/SQLiteAssetHelper(32627): at dalvik.system.NativeStart.main(Native Method)
02-03 10:44:48.466: D/AndroidRuntime(32627): Shutting down VM
02-03 10:44:48.466: W/dalvikvm(32627): threadid=1: thread exiting with uncaught exception (group=0x41989930)
02-03 10:44:48.466: E/AndroidRuntime(32627): FATAL EXCEPTION: main
02-03 10:44:48.466: E/AndroidRuntime(32627): java.lang.RuntimeException: Unable to start activity ComponentInfo{ru.nag.nagupscalc/ru.nag.nagupscalc.Calc}: android.database.sqlite.SQLiteException: Can't upgrade read-only database from version 1 to 2: /data/data/ru.nag.nagupscalc/databases/ups.db
02-03 10:44:48.466: E/AndroidRuntime(32627): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2307)
02-03 10:44:48.466: E/AndroidRuntime(32627): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2357)
02-03 10:44:48.466: E/AndroidRuntime(32627): at android.app.ActivityThread.access$600(ActivityThread.java:153)
02-03 10:44:48.466: E/AndroidRuntime(32627): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1247)
02-03 10:44:48.466: E/AndroidRuntime(32627): at android.os.Handler.dispatchMessage(Handler.java:99)
02-03 10:44:48.466: E/AndroidRuntime(32627): at android.os.Looper.loop(Looper.java:137)
02-03 10:44:48.466: E/AndroidRuntime(32627): at android.app.ActivityThread.main(ActivityThread.java:5226)
02-03 10:44:48.466: E/AndroidRuntime(32627): at java.lang.reflect.Method.invokeNative(Native Method)
02-03 10:44:48.466: E/AndroidRuntime(32627): at java.lang.reflect.Method.invoke(Method.java:511)
02-03 10:44:48.466: E/AndroidRuntime(32627): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
02-03 10:44:48.466: E/AndroidRuntime(32627): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
02-03 10:44:48.466: E/AndroidRuntime(32627): at dalvik.system.NativeStart.main(Native Method)
02-03 10:44:48.466: E/AndroidRuntime(32627): Caused by: android.database.sqlite.SQLiteException: Can't upgrade read-only database from version 1 to 2: /data/data/ru.nag.nagupscalc/databases/ups.db
02-03 10:44:48.466: E/AndroidRuntime(32627): at com.readystatesoftware.sqliteasset.SQLiteAssetHelper.getReadableDatabase(SQLiteAssetHelper.java:266)
02-03 10:44:48.466: E/AndroidRuntime(32627): at ru.nag.nagupscalc.DataBase.getEmployees(DataBase.java:28)
02-03 10:44:48.466: E/AndroidRuntime(32627): at ru.nag.nagupscalc.Calc.onCreate(Calc.java:45)
02-03 10:44:48.466: E/AndroidRuntime(32627): at android.app.Activity.performCreate(Activity.java:5104)
02-03 10:44:48.466: E/AndroidRuntime(32627): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
02-03 10:44:48.466: E/AndroidRuntime(32627): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2261)
02-03 10:44:48.466: E/AndroidRuntime(32627): ... 11 more


Как понятно - не хватает ему скрипта обновления.
Подскажите где это должно быть прописано.
Спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.02.2014, 08:50     SQLite обновление базы данных
Посмотрите здесь:

Выборка с базы данных SQLite - Программирование Android
Доброго времени суток ребята. Занимаюсь простым приложением, что-то типа заметок. Вот случилась незадача с работой SQLite. База...

Вытащить информацию из базы данных Sqlite - Программирование Android
Здравствуйте! Пишу простенькое приложение "Справочник". В кратком что у меня есть: 3 класса: MainActivity - тут у меня расположен ListView...

Где хранится файл базы данных SQLite на устройстве? - Программирование Android
Здравствуйте друзья! Где храниться файл базы данных SQLite на устройстве или может этот файл создается автоматически при загрузке...

Обновление Базы данных - Программирование Android
Есть база данных которую просматриваю в Активити1, сделал все работает. При нажатии на кнопку перехожу в Ативити2 где вижу последнюю...

Обновление базы данных вручную - Программирование Android
Бьюсь я над проблемой изменения значений в БД ( http://www.cyberforum.ru/android-dev/thread1805861.html ). Решил посмотреть что именно...

Обновление строки в sqlite - Программирование Android
Так я пытался обнавлять значение в строке с id = 1; Items items = new Items(); items.setID(1); ...

Обновление ListView при изменении значений в базе SQLite - Программирование Android
Доброго времени суток господа. У меня такой вопрос. Как лучше сделать обновление данных в ArrayList,а так же занесение данных в базу?? ...

Как отобразить запись из базы sqlite - Программирование Android
Имеется база, 1 активити и пару виджетов для добавления записей в базу sqlite. Вопрос такой: Как показать количество записей в базе на...

Использование готовой базы SqLite из ресурсов - Программирование Android
Здравствуйте. Мне необходимо в приложении использовать готовую базу, но для того чтобы её использовать я копирую её в то место где...

SMS рассылка контактам с базы SQLite - Программирование Android
Всем доброго времени суток. Помогите пожалуйста вытащить номера с таблицы и создать цикл для отправки SMS. Код отправки уже готов и...

При переносе приложения на карту памяти где хранятся SharedPreferences, SQLite базы и тп ? - Программирование Android
Где хранятся настройки SharedPreferences, SQLite базы и тд? Нужно ли что то дополнительно прописывать или при переносе на карту памяти...

SQLite вывод данных - Программирование Android
Здравствуйте. Подскажите, как вывести данные из колонки БД и записать в массив. Пытался пока что только извлечь данные в переменные: ...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 422
03.02.2014, 10:20     SQLite обновление базы данных #2
База открывается в режиме getReadableDatabase, а нужен режим getWritableDatabase
NOSC
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
03.02.2014, 14:27  [ТС]     SQLite обновление базы данных #3
Цитата Сообщение от Slon747 Посмотреть сообщение
База открывается в режиме getReadableDatabase, а нужен режим getWritableDatabase
Не помогло:

Кликните здесь для просмотра всего текста
02-03 13:23:23.248: I/SQLiteAssetHelper(4578): successfully opened database ups.db
02-03 13:23:23.248: W/SQLiteAssetHelper(4578): Upgrading database ups.db from version 1 to 2...
02-03 13:23:23.248: W/SQLiteAssetHelper(4578): missing database upgrade script: databases/ups.db_upgrade_1-2.sql
02-03 13:23:23.248: E/SQLiteAssetHelper(4578): no upgrade script path from 1 to 2
02-03 13:23:23.248: D/AndroidRuntime(4578): Shutting down VM
02-03 13:23:23.248: W/dalvikvm(4578): threadid=1: thread exiting with uncaught exception (group=0x41989930)
02-03 13:23:23.258: E/AndroidRuntime(4578): FATAL EXCEPTION: main
02-03 13:23:23.258: E/AndroidRuntime(4578): java.lang.RuntimeException: Unable to start activity ComponentInfo{ru.nag.nagupscalc/ru.nag.nagupscalc.Calc}: com.readystatesoftware.sqliteasset.SQLiteAssetHelper$SQLiteAssetException: no upgrade script path from 1 to 2
02-03 13:23:23.258: E/AndroidRuntime(4578): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2307)
02-03 13:23:23.258: E/AndroidRuntime(4578): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2357)
02-03 13:23:23.258: E/AndroidRuntime(4578): at android.app.ActivityThread.access$600(ActivityThread.java:153)
02-03 13:23:23.258: E/AndroidRuntime(4578): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1247)
02-03 13:23:23.258: E/AndroidRuntime(4578): at android.os.Handler.dispatchMessage(Handler.java:99)
02-03 13:23:23.258: E/AndroidRuntime(4578): at android.os.Looper.loop(Looper.java:137)
02-03 13:23:23.258: E/AndroidRuntime(4578): at android.app.ActivityThread.main(ActivityThread.java:5226)
02-03 13:23:23.258: E/AndroidRuntime(4578): at java.lang.reflect.Method.invokeNative(Native Method)
02-03 13:23:23.258: E/AndroidRuntime(4578): at java.lang.reflect.Method.invoke(Method.java:511)
02-03 13:23:23.258: E/AndroidRuntime(4578): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
02-03 13:23:23.258: E/AndroidRuntime(4578): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
02-03 13:23:23.258: E/AndroidRuntime(4578): at dalvik.system.NativeStart.main(Native Method)
02-03 13:23:23.258: E/AndroidRuntime(4578): Caused by: com.readystatesoftware.sqliteasset.SQLiteAssetHelper$SQLiteAssetException: no upgrade script path from 1 to 2
02-03 13:23:23.258: E/AndroidRuntime(4578): at com.readystatesoftware.sqliteasset.SQLiteAssetHelper.onUpgrade(SQLiteAssetHelper.java:314)
02-03 13:23:23.258: E/AndroidRuntime(4578): at com.readystatesoftware.sqliteasset.SQLiteAssetHelper.getWritableDatabase(SQLiteAssetHelper.java:197)
02-03 13:23:23.258: E/AndroidRuntime(4578): at ru.nag.nagupscalc.DataBase.getEmployees(DataBase.java:28)
02-03 13:23:23.258: E/AndroidRuntime(4578): at ru.nag.nagupscalc.Calc.onCreate(Calc.java:45)
02-03 13:23:23.258: E/AndroidRuntime(4578): at android.app.Activity.performCreate(Activity.java:5104)
02-03 13:23:23.258: E/AndroidRuntime(4578): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
02-03 13:23:23.258: E/AndroidRuntime(4578): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2261)
02-03 13:23:23.258: E/AndroidRuntime(4578): ... 11 more


Добавлено через 1 час 19 минут
Ошибка начинается с того что нет некого скрипта обновления ups.db_upgrade_1-2.sql в папке с базой.

Я сравнил несколько проектов и нашел что при upgrade действительно требуется такой файл. Единственное похожее на содержимое что я нашел - это Дамп базы данных.
Но все равно не помогло, ошибка немного изменилась:

Кликните здесь для просмотра всего текста
02-03 14:40:04.037: I/SQLiteAssetHelper(7766): successfully opened database ups.db
02-03 14:40:04.047: W/SQLiteAssetHelper(7766): Upgrading database ups.db from version 1 to 2...
02-03 14:40:04.047: W/SQLiteAssetHelper(7766): processing upgrade: databases/ups.db_upgrade_1-2.sql
02-03 14:40:04.057: E/SQLiteLog(7766): (1) statement aborts at 2: [-- ----------------------------
02-03 14:40:04.057: E/SQLiteLog(7766): -- Records of akb
02-03 14:40:04.057: E/SQLiteLog(7766): -- ----------------------------
02-03 14:40:04.057: E/SQLiteLog(7766): BEGIN] cannot start a transaction within a transaction
02-03 14:40:04.197: D/AndroidRuntime(7766): Shutting down VM
02-03 14:40:04.197: W/dalvikvm(7766): threadid=1: thread exiting with uncaught exception (group=0x41989930)
02-03 14:40:04.217: E/AndroidRuntime(7766): FATAL EXCEPTION: main
02-03 14:40:04.217: E/AndroidRuntime(7766): java.lang.RuntimeException: Unable to start activity ComponentInfo{ru.nag.nagupscalc/ru.nag.nagupscalc.Calc}: android.database.sqlite.SQLiteException: cannot start a transaction within a transaction (code 1)
02-03 14:40:04.217: E/AndroidRuntime(7766): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2307)
02-03 14:40:04.217: E/AndroidRuntime(7766): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2357)
02-03 14:40:04.217: E/AndroidRuntime(7766): at android.app.ActivityThread.access$600(ActivityThread.java:153)
02-03 14:40:04.217: E/AndroidRuntime(7766): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1247)
02-03 14:40:04.217: E/AndroidRuntime(7766): at android.os.Handler.dispatchMessage(Handler.java:99)
02-03 14:40:04.217: E/AndroidRuntime(7766): at android.os.Looper.loop(Looper.java:137)
02-03 14:40:04.217: E/AndroidRuntime(7766): at android.app.ActivityThread.main(ActivityThread.java:5226)
02-03 14:40:04.217: E/AndroidRuntime(7766): at java.lang.reflect.Method.invokeNative(Native Method)
02-03 14:40:04.217: E/AndroidRuntime(7766): at java.lang.reflect.Method.invoke(Method.java:511)
02-03 14:40:04.217: E/AndroidRuntime(7766): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
02-03 14:40:04.217: E/AndroidRuntime(7766): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
02-03 14:40:04.217: E/AndroidRuntime(7766): at dalvik.system.NativeStart.main(Native Method)
02-03 14:40:04.217: E/AndroidRuntime(7766): Caused by: android.database.sqlite.SQLiteException: cannot start a transaction within a transaction (code 1)
02-03 14:40:04.217: E/AndroidRuntime(7766): at android.database.sqlite.SQLiteConnection.nativeExecuteForChangedRowCount(Native Method)
02-03 14:40:04.217: E/AndroidRuntime(7766): at android.database.sqlite.SQLiteConnection.executeForChangedRowCount(SQLiteConnection.java:727)
02-03 14:40:04.217: E/AndroidRuntime(7766): at android.database.sqlite.SQLiteSession.executeForChangedRowCount(SQLiteSession.java:754)
02-03 14:40:04.217: E/AndroidRuntime(7766): at android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:64)
02-03 14:40:04.217: E/AndroidRuntime(7766): at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1665)
02-03 14:40:04.217: E/AndroidRuntime(7766): at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1594)
02-03 14:40:04.217: E/AndroidRuntime(7766): at com.readystatesoftware.sqliteasset.SQLiteAssetHelper.onUpgrade(SQLiteAssetHelper.java:328)
02-03 14:40:04.217: E/AndroidRuntime(7766): at com.readystatesoftware.sqliteasset.SQLiteAssetHelper.getWritableDatabase(SQLiteAssetHelper.java:197)
02-03 14:40:04.217: E/AndroidRuntime(7766): at ru.nag.nagupscalc.DataBase.getEmployees(DataBase.java:28)
02-03 14:40:04.217: E/AndroidRuntime(7766): at ru.nag.nagupscalc.Calc.onCreate(Calc.java:45)
02-03 14:40:04.217: E/AndroidRuntime(7766): at android.app.Activity.performCreate(Activity.java:5104)
02-03 14:40:04.217: E/AndroidRuntime(7766): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
02-03 14:40:04.217: E/AndroidRuntime(7766): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2261)
02-03 14:40:04.217: E/AndroidRuntime(7766): ... 11 more


Добавлено через 1 час 43 минуты
Немного разобрался.
ups.db_upgrade_1-2.sql - это скрипт, по сути merge как в MySql, не подскажите редактор SQLite баз данных, который мог бы генерировать подобный скрипт, чтобы руками его не писать.

Спасибо
Yandex
Объявления
03.02.2014, 14:27     SQLite обновление базы данных
Ответ Создать тему
Опции темы

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