在现有SQLITE中创建附加表(无数据丢失)

时间:2012-07-05 20:12:46

标签: android sql sqlite

我想在现有数据库中添加一个额外的表,而不会丢失数据。 因此删除表并创建新表是没有选择的。 最好的方法是什么?

5 个答案:

答案 0 :(得分:5)

似乎要容易得多。我使用SQLiteOpenHelper。因此,如果DB已经存在,则永远不会调用onCreate()。当版本号增加时,将调用onUpdate()。在onUpdate()中,我添加了新表“如果不存在则创建表”。从SQLITE.ORG的文档中:但是,如果“IF NOT EXISTS”子句被指定为CREATE TABLE语句的一部分并且已经存在同名的表或视图,则CREATE TABLE命令根本没有效果(并且没有返回错误消息)。现在表格已经创建并且很好。

答案 1 :(得分:3)

我这样做的方法是创建一个单独的数据库,将当前所有内容复制到临时新数据库,然后删除旧数据库,然后从临时数据库中复制信息。

不确定是否有其他方法可以做到,但如果有,我很乐意听到它

答案 2 :(得分:1)

如果要在现有数据库中添加新表,则应在onUpgrade()方法中执行此操作,如: -

 @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    if (oldVersion == xyz) {
        db.execSQL(QUERY_CREATE_TABLE_..........NEW);
    }
}

此处 xyz 是您要在其中添加新表的旧版数据库。

请记住更新DATABASE_VERSION

  

当我们增加数据库版本然后 onUpgrade()方法调用,并使用条件添加表。

     

并且还在onCreate()内部使用现有表创建一个新表,用于全新安装,如: -

 @Override
public void onCreate(SQLiteDatabase db) {
        db.execSQL(QUERY_CREATE_TABLE_..........OLD);
        db.execSQL(QUERY_CREATE_TABLE_..........OLD);
        db.execSQL(QUERY_CREATE_TABLE_..........NEW);
}

答案 3 :(得分:0)

创建一个扩展SQLiteOpenHelper的类,重写onOpen(SQLiteDatabase db),使用表创建查询创建一个String,然后使用db.execSQL(String str);

答案 4 :(得分:-1)

首先,您应该了解onCreate()和onUpgrade()方法

onCreate-首次调用onCreate()方法创建的数据库时。第一次安装应用程序时,始终调用

的onCreate()方法。

onUpgrade()-:更改数据库版本时,然后调用onUpgrade()方法

因此,新用户应获取所有表,而旧用户应获取所有升级表和新表。

在以下示例中,假设我们要添加新表 Table_5 并更改 Table_4

public void onCreate(SQLiteDatabase db) {
 //For new User oncreate method will executed an new user get all the table
    db.execSQL( Create_Table );
    db.execSQL( Create_Table2 );
    db.execSQL( Create_Table3 );
    db.execSQL( Create_Table4 );
    db.execSQL( Create_Table5);  
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

      if(oldVersion<newVersion)
        {
           //For old user onUpgrade method is execute 
             db.execSQL( Alter_Table4);
             db.execSQL( Create_Table5);

         }     
}