代码之家  ›  专栏  ›  技术社区  ›  iamanbansal

如何在没有SQLiteOpenHelper的情况下在app中升级SQLite表

  •  2
  • iamanbansal  · 技术社区  · 7 年前

    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数据时崩溃,

    SQLiteOpenHelper


    这是解决方案


    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;
        }
    
        }
      }
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   CL.    7 年前

    你应该用 SQLiteOpenHelper 首先。 存取资料表 现在

    PRAGMA user_version ),现有数据库文件将具有版本0,该版本由 存取资料表 onCreate .

    所以你的 创建时的回调函数 方法必须检查 attendance 表已存在。如果没有,则从头开始创建数据库;如果是,请将表从版本0升级到版本1。 (要添加列,请使用 ALTER TABLE

    然后,所有未来的升级都可以使用正常的 onUpgrade 机械装置