SQLiteException: невозможно обновить базу данных только для чтения с версии X до Y - PullRequest
2 голосов
/ 30 декабря 2011

Как обновить базу данных sqlite только для чтения

Я попытался изменить значение на SQLiteDatabase.OPEN_READWRITE); и getReadableDatabase();, результат остался прежним.


Когда я хочу обновить базу данных sqlite с версии 1 до 2, я получаю эту ошибку:

SQLiteException: Can't upgrade read-only database from version X to Y

В первой версии моих приложений я использую этот код:

private static final String DB_NAME = "this_the_database";
private final Context context;
private static final int DATABASE_VERSION = 1;

public DatabaseHelper(Context context) {
    super(context, DB_NAME, null, DATABASE_VERSION);
    this.context = context;

    String path = context.getDatabasePath(DB_NAME).getAbsolutePath();
    SQLiteDatabase db = null;
    try {
        db = SQLiteDatabase.openDatabase(path, null,
                SQLiteDatabase.OPEN_READONLY);
    } catch (SQLiteException e) { // DB not found       
        db = getReadableDatabase();
        db.close();
        // Copy DB from asset folder.
        copyDatabase(path);
    }

    if (db != null) {
        db.close();
    }
}

когда я решил обновить базу данных, используя ее, она упала

@Override
public void onCreate(SQLiteDatabase db) {
    new DatabaseHelper(context).getReadableDatabase();
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + DB_NAME);
    onCreate(db);
}

Ref: http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/

Ответы [ 2 ]

1 голос
/ 30 декабря 2011

Почему вы используете SQLiteDatabase.openDatabase?Достаточно иметь только вызов super (..) в конструкторе DatabaseHelper.GetReadableDatabase () может быть в методе open () или вызываться действием, открывающим базу данных.В apidemos есть пример LoaderThrottle, который показывает, как использовать базу данных Android SQLite.

0 голосов
/ 31 октября 2012

вы не можете получить читаемую базу данных при создании, но даже если бы вы могли, база данных уже передана в (SQLiteDatabase db), и на данный момент нет содержимого для чтения. on create вызывается только тогда, когда база данных впервые создается при запуске приложения, и вы можете добавлять / удалять столбцы только при создании или обновлении. Теперь, что вы пытаетесь сделать с этим?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...