你们需要以明智的方式提升你的助手。
您应始终拥有新的表格编制问题,并使用这一系统更新和转让任何现有数据。 注:上等值方法一度用于你的粉碎机助器,需要处理所有表格。
www。un。org/Depts/DGACM/index_spanish。htm 因此,建议升级:
- beginTransaction
- run a table creation with
if not exists
(we are doing an upgrade, so the table might not exists yet, it will fail alter and drop)
- put in a list the existing columns
List<String> columns = DBUtils。GetColumns(db, TableName);
- backup table (
ALTER table " + TableName + " RENAME TO temp_" + TableName
)
- create new table (the newest table creation schema)
- get the intersection with the new columns, this time columns taken from the upgraded table (
columns。retainAll(DBUtils。GetColumns(db, TableName));
)
- restore data (
String cols = StringUtils。join(columns, ",");
db。execSQL(String。format(
"INSERT INTO %s (%s) SELECT %s from temp_%s",
TableName, cols, cols, TableName));
)
- remove backup table (
DROP table temp_" + TableName
)
- setTransactionSuccessful
(如果你重新命名一栏,本末处理下级表,你不会因为栏目名称不匹配而转移现有数据)。
。
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();
}