更改列的类型

时间:2017-11-20 21:08:03

标签: android sqlite android-sqlite

我有一张这样的表:

 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()方法完成吗? 我已经阅读了一些文档,但没有找到任何有关此问题的文章。

2 个答案:

答案 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 ..."

希望这就是你所追求的。