Android 如何在没有SQLiteOpenHelper的情况下升级应用程序中的SQLite表

Android 如何在没有SQLiteOpenHelper的情况下升级应用程序中的SQLite表,android,sqlite,upgrade,android-update-app,Android,Sqlite,Upgrade,Android Update App,我已在我的应用程序中创建了一个表: public static SQLiteDatabase attendancedb = this.openOrCreateDatabase("Attendance", Context.MODE_PRIVATE, null); attendancedb.execSQL("CREATE TABLE IF NOT EXISTS attendance ( subName VARCHAR , attend VARCHAR, total VARCHAR, PRIMAR

我已在我的应用程序中创建了一个表:

public  static SQLiteDatabase attendancedb = this.openOrCreateDatabase("Attendance", Context.MODE_PRIVATE, null);

attendancedb.execSQL("CREATE TABLE IF NOT EXISTS attendance ( subName VARCHAR , attend VARCHAR, total VARCHAR, PRIMARY KEY (subName))");
如何在表中再添加一列(注释)

如果我这样做:

attendancedb.execSQL("CREATE TABLE IF NOT EXISTS attendance ( subName VARCHAR , attend VARCHAR, total VARCHAR,notes VARCHAR, PRIMARY KEY (subName))");
更新的应用程序在访问notes数据时崩溃, 但是,如果我重新安装应用程序,它就会工作

或者现在和将来使用ALTERQUERY是否有效

我没有使用
SQLiteOpenHelper


这是解决方案

您首先应该使用
SQLiteOpenHelper
。 无论如何,我建议您现在就开始使用
SQLiteOpenHelper

由于您的旧应用未设置版本(使用),现有数据库文件的版本为0,被
SQLiteOpenHelper
解释为空,因此它将调用
onCreate

因此,您的
onCreate
方法必须检查
Attention
表是否已经存在。如果没有,则从头开始创建数据库;如果是,请将表从版本0升级到版本1。 (要添加列,请使用。)


然后,所有未来的升级都可以使用正常的
onUpgrade
机制。

可能重复@0X0nosugar No,这将需要使用open helper类。现在如果我使用SQLiteOpenHelper,那么在调用
getReadableDatabase()之后,我必须更改使用数据库读取或写入数据的所有代码
/
getWritableDatabase()
,您拥有相同的
SQLiteDatabase
对象。但关键是,助手总是在打开数据库之前检查版本。谢谢,我照你说的做了。签出我的解决方案:)
public class DatabaseHelper extends SQLiteOpenHelper {

public DatabaseHelper(Context context) {

    super(context, "Attendance", null, 1);

}

@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {

    if(checktable(sqLiteDatabase)==0){ //for old user
        try {
            sqLiteDatabase.execSQL("ALTER TABLE attendance ADD notes VARCHAR;");
        }catch (Exception e){  //for new user

            sqLiteDatabase.execSQL("CREATE TABLE  attendance ( subName VARCHAR , attend VARCHAR, total VARCHAR,notes VARCHAR, PRIMARY KEY (subName))");
        }
    }
    }

@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int old, int newVersion) {


}



int checktable(SQLiteDatabase db){

    try{
    Cursor c= db.rawQuery("SELECT notes FROM  attendance", null);


        return 1;
    }catch (Exception e){

        return 0;
    }

    }
  }