Android 升级sqllite db的正确方法是什么?
以前的db版本没有f字段。 这是升级数据库的正确方法吗? 我需要onUpgrade中的onCreatedb吗 我这样做了好几次,每次都有另一个例外: 1个表已存在,因此我添加了(如果不存在) 2无法读取第0行,第5列错误此处我丢失了它 这是升级数据库的正确方法吗Android 升级sqllite db的正确方法是什么?,android,database,sqlite,Android,Database,Sqlite,以前的db版本没有f字段。 这是升级数据库的正确方法吗? 我需要onUpgrade中的onCreatedb吗 我这样做了好几次,每次都有另一个例外: 1个表已存在,因此我添加了(如果不存在) 2无法读取第0行,第5列错误此处我丢失了它 这是升级数据库的正确方法吗 我想保留我的数据您无需在onUpgrade中调用onCreate。正在对db.execSQLTABLE\u MAIN\u进行足够的升级,以便进行更新。 现在,您应该清除应用程序中的数据。为此,请重新安装应用程序或在android she
我想保留我的数据您无需在onUpgrade中调用onCreate。正在对db.execSQLTABLE\u MAIN\u进行足够的升级,以便进行更新。 现在,您应该清除应用程序中的数据。为此,请重新安装应用程序或在android shell中执行
private static final String TABLE_MAIN_CREATE = "CREATE TABLE IF NOT EXISTS " + TABLE_MAIN_NAME + " ( a INTEGER, b LONG, c TEXT, d TEXT, e DATETIME, f TEXT)";
private static final String TABLE_MAIN_UPGRADE = "ALTER TABLE " + TABLE_MAIN_NAME + " ADD Column f TEXT";
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(TABLE_MAIN_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion < newVersion) {
db.execSQL(TABLE_MAIN_UPGRADE);
}
onCreate(db);
}
在onUpgrade方法中可以执行的一种方法是删除表并重新创建它。这样,只会删除该特定表的数据,而不会删除整个数据库数据
pm clear your.app.package
在
此方法在配置数据库连接后以及在创建、升级或降级数据库架构(如有必要)后调用
onCreatedb;升级数据库时没有必要使用此选项。警告:这是一个很好且有效的解决方案,但有很多人因为个人原因而不赞成此答案
你必须根据旧版本做些什么
fx:你可以有10-14的db版本,旧的10个版本你不支持,在每一个新版本你添加一个新的列,代码应该看起来像WVersion是14:
私有静态最终字符串表\u MAIN\u CREATE\u 14=
如果不存在,则创建表+表\u主\u名称+
a整数、b长、c文本、d文本、e日期时间、f文本、g文本、h文本、i文本;
私有静态最终字符串表\u MAIN\u升级\u 10\u 11=
ALTER TABLE+TABLE\u MAIN\u NAME+添加文本列;
私有静态最终字符串表\u MAIN\u升级\u 11\u 12=
ALTER TABLE+TABLE\u MAIN\u NAME+添加g列文本;
私有静态最终字符串表\u MAIN\u升级\u 12\u 13=
ALTER TABLE+TABLE\u MAIN\u NAME+添加h列文本;
私有静态最终字符串表\u MAIN\u升级\u 13\u 14=
更改表格+表格主名称+添加第一列文本;
@凌驾
public void onCreateSQLiteDatabase db{
db.execSQLTABLE_MAIN_CREATE_14;
}
@凌驾
public void ONUPGRADESQLITEDB数据库,int-oldVersion,int-newVersion{
切换版本{
案例10://从10到11,然后转到下一个案例
db.execSQLTABLE\u MAIN\u升级\u 10\u 11;
案例11://从11到12,然后转到下一个案例
db.execSQLTABLE\u MAIN\u升级\u 11\u 12;
案例12://从12到13,然后转到下一个案例
db.execSQLTABLE\u MAIN\u升级\u 12\u 13;
案例13://从13到新版本
db.execSQLTABLE\u MAIN\u升级\u 13\u 14;
打破
违约:
//不要太老,所以我们应该放弃,重新创造;
db.execSQLDROP TABLE如果存在+TABLE\u MAIN\u NAME;
onCreatedb;
打破
}
}
卸载并重新安装应用程序进行此操作我想保留我的数据除此之外,当用户在google play上重新安装应用程序时,它会降低搜索率如果没有任何合理的评论,我看不到任何投票下降的点nx,但我可以看到这一点。。。有时我真的会成为讽刺性的评论,等等。唯一能踢我一脚的方法就是否决这个问题:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
Log.w("TAG", "Upgrading database from version " + oldVersion + " to " + newVersion);
switch (oldVersion)
{
case 1:
db.execSQL("DROP TABLE IF EXISTS " + TABLE_MAIN_NAME);
db.execSQL(TABLE_MAIN_CREATE);
default:
break;
}
}