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;
}
}
}