繁体   English   中英

更新应用程序后,SQlite“没有这样的表”

[英]SQlite “no such table” after updating application

我今天更新了我的应用程序,并开始在crashlitics中看到以下内容:

android.database.sqlite.SQLiteException: no such table: LESSONATTACHMENT (code 1 SQLITE_ERROR[1]): , while compiling: SELECT _THUMB_PATH FROM LESSONATTACHMENT WHERE _id = 2

我在SQLiteOpenHelper创建了一个新表,更新之前该表不在应用程序中。

这是我创建表的方式:

public void onCreate(SQLiteDatabase db) {
    db.execSQL(CREATE_TABLE_LESSON_ATTACHMENTS);
} 

我应该改为将其放在OnUpgrade吗? 像这样:

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL(CREATE_TABLE_LESSON_ATTACHMENTS);
}

您需要增加数据库版本并在onUpgrade中创建新表,并可能删除旧表。

您的数据库仅创建一次。 升级是通过onUpgrade功能完成的

您也可以删除数据库,它将使用新表创建新数据库,但这取决于您是否能够立即执行。

例如,此代码会将您的数据库升级到当前版本

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    switch(oldVersion){
        case 1:
            //Changes between version 1 and 2
        case 2:
            // Changes between Version 2 and 3
        case currentversion:
            //changes between last change and now
    }
}

当您更新数据库时,只需在其下面放一个新案例,其中包含新版本。 这样,您可以维护数据库的每个版本,并确保将其正确升级。 重要的是,在每种情况下都不要休息。

例如,此代码显示了我的一个数据库,当我增加版本时,我只是为旧版本添加了新的案例。 当您尚未升级数据库时,请将新版本设置为比旧版本高1,并为旧版本添加case子句。

public class database extends SQLiteOpenHelper {

private static String DATABASE = "Database";
private static int VERSION = 4;


public database(@Nullable Context context) {
    super(context, DATABASE, null, VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
   db.execSQL("CREATE DATABASE TABLE");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    switch(oldVersion){
        case 1:
            db.execSQL("CHANGES DONE AFTER VERSION 1");
        case 2:
            db.execSQL("CHANGES DONE AFTER VERSION 2");
        case 3:
            db.execSQL("CHANGES DONE AFTER VERSION 3");
    }
}

每当您要在表中进行更改或在应用程序更新时创建表时,都必须更改数据库的版本。 在您的情况下,让我们假设您已从dbversion从2升级到3,并且想要为大于2的版本创建一个表,然后必须在onUpgrade中创建一个表,如下所示:

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    if(newVersion>=3){
        db.execSQL("CREATE TABLE IF NOT EXISTS `TABLE_NAME` ....");
    }
}

在这里,我为所有大于2的版本创建表,因为dbversion有可能从2升级到4或其他一些大于3的版本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM