Android 保留软件不同版本的永久性信息
我计划写一个免费版本和一个完整版本的软件。我希望该软件的免费版本存储的信息也能被完整版本访问(我不想使用内容提供商)。我还想确保软件更新时这些数据不会丢失。如何实现这一点?您需要为您的sqlite助手实现一种智能的onUpgrade方法 您应该随时准备新的表创建查询,并将其用于升级和传输任何现有数据。注意:onUpgrade方法对sqlite助手对象运行一次,您需要处理其中的所有表 那么建议升级什么:Android 保留软件不同版本的永久性信息,android,Android,我计划写一个免费版本和一个完整版本的软件。我希望该软件的免费版本存储的信息也能被完整版本访问(我不想使用内容提供商)。我还想确保软件更新时这些数据不会丢失。如何实现这一点?您需要为您的sqlite助手实现一种智能的onUpgrade方法 您应该随时准备新的表创建查询,并将其用于升级和传输任何现有数据。注意:onUpgrade方法对sqlite助手对象运行一次,您需要处理其中的所有表 那么建议升级什么: 开始换药 如果不存在,则使用运行表创建(我们正在进行升级,因此表可能还不存在,它将失败并删除
- 开始换药
- 如果不存在,则使用
运行表创建(我们正在进行升级,因此表可能还不存在,它将失败并删除)
- 将现有列放入列表
list columns=DBUtils.GetColumns(db,TableName)代码>
- 备份表(
)ALTER table“+TableName+”重命名为'temp_uU8;”+TableName
- 创建新表(最新的表创建架构)
- 获取与新列的交集,这次是从升级的表中获取的列(
)columns.retainal(DBUtils.GetColumns(db,TableName));
- 还原数据(
)stringcols=StringUtils.join(columns,”); db.execSQL(String.format( “插入到%s(%s)从%s中选择%s”, TableName,cols,cols,TableName));
- 删除备份表(
)删除表“temp”+TableName
- setTransactionSuccessful
publicstaticlist GetColumns(SQLiteDatabase db,stringtablename){
列表ar=null;
光标c=null;
试一试{
c=db.rawQuery(“从“+tableName+”limit 1”中选择*项,空);
如果(c!=null){
ar=newarraylist(Arrays.asList(c.getColumnNames());
}
}捕获(例外e){
Log.v(tableName,e.getMessage(),e);
e、 printStackTrace();
}最后{
如果(c!=null)
c、 close();
}
返回ar;
}
公共静态字符串联接(列表、字符串delim){
StringBuilder buf=新的StringBuilder();
int num=list.size();
for(int i=0;i
我会试试这个,然后返回给您@Pentium10。塔克斯!
public static List<String> GetColumns(SQLiteDatabase db, String tableName) {
List<String> ar = null;
Cursor c = null;
try {
c = db.rawQuery("select * from " + tableName + " limit 1", null);
if (c != null) {
ar = new ArrayList<String>(Arrays.asList(c.getColumnNames()));
}
} catch (Exception e) {
Log.v(tableName, e.getMessage(), e);
e.printStackTrace();
} finally {
if (c != null)
c.close();
}
return ar;
}
public static String join(List<String> list, String delim) {
StringBuilder buf = new StringBuilder();
int num = list.size();
for (int i = 0; i < num; i++) {
if (i != 0)
buf.append(delim);
buf.append((String) list.get(i));
}
return buf.toString();
}