2012-07-05 30 views

回答

3

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

不知道是否有另一种方式来做到这一点,但如果有我喜欢听到它

+0

似乎要容易得多。 我使用SQLiteOpenHelper。 因此,如果数据库已经存在,onCreate()永远不会被调用。 当版本号增加时,调用onUpdate()。 在onUpdate()我添加了我的新表“如果不存在,创建表”。 从SQLITE.ORG文档中可以看出:但是,如果将“IF NOT EXISTS”子句指定为CREATE TABLE语句的一部分,并且已存在同名表或视图,则CREATE TABLE命令根本不起作用没有错误消息返回)。 现在表已创建并罚款。 – venni 2012-07-05 20:58:06

0

创建扩展SQLiteOpenHelper类,覆盖的OnOpen(SQLiteDatabase DB),创建表创建一个字符串查询,然后使用db.execSQL(String str);

4

它似乎更容易。我使用SQLiteOpenHelper。所以如果数据库已经存在,那么onCreate()就不会被调用。当版本号增加时,调用onUpdate()。在onUpdate()我添加了我的新表“如果不存在,创建表”。从SQLITE.ORG的文档:但是,如果“IF NOT EXISTS”子句被指定为CREATE TABLE语句的一部分,并且已存在同名表或视图,则CREATE TABLE命令根本无效错误消息被返回)。现在桌子已经创建好了。

0

如果你想在现有的数据库中添加新表,那么你应该做这个里面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); 
}