我有一张这样的表:
private void Crea_TabellaIconePers(SQLiteDatabase db) {
String sqlFoto = "CREATE TABLE IF NOT EXISTS {0} " +
"({1} INTEGER, " +
"{2} BLOB, " +
"{3} TEXT);";
db.execSQL(MessageFormat.format(sqlFoto,
Tab_Icone_pers.TABLE_NAME,
Tab_Icone_pers._ID,
Tab_Icone_pers.ICONA,
Tab_Icone_pers.ID_PASSWORD));
}
我想将第一个INTEGER字段转换为INTEGER PRIMARY KEY AUTOINCREMENT 可以用onUpgrade()方法完成吗? 我已经阅读了一些文档,但没有找到任何有关此问题的文章。
答案 0 :(得分:0)
SQLite不支持这种表格更改。您需要使用所需的架构创建另一个表,并根据需要从原始表中复制所有值。
回答你的问题 - 是的,可以在onUpgrade()
方法中完成。
答案 1 :(得分:0)
我就是这样做的:
首先,改变你的sql,使表格与你想要的表格相匹配,然后做类似的事情:
String cols = COL_NAME_1 + ", " +
COL_NAME_2 + ", " +
COL_NAME_3 + ", " +
COL_NAME_4 + ", " +
COL_NAME_5 + ", " +
COL_NAME_6 ;
db.execSQL("ALTER TABLE " + TABLE_1 + " RENAME TO " + TABLE_1 + "_old;");
db.execSQL(CREATE_TABLE_1);
db.execSQL("INSERT INTO " + TABLE_1 + "(" + cols + ") SELECT " + cols + " FROM " + TABLE_1 +"_old;");
db.execSQL("DROP TABLE " + TABLE_1 + "_old;");
所以我们正在制作表的副本,通过任何修改重新制作表,将数据从旧表复制到新表然后删除旧表。
你不能使用"如果存在"在这种情况下,您必须使用"创建表table_1 ..."
希望这就是你所追求的。