2013-05-16 87 views
1

我创建了一个数据库,这样再次创建数据库:如何防止从开始

public void onCreate(SQLiteDatabase db) { 
     db.execSQL("CREATE TABLE " + "sorular" 
       + " (_id INTEGER PRIMARY KEY," 
       + "soruIcerik TEXT," + " siklar1 TEXT," + " siklar2 TEXT," 
       + " siklar3 TEXT," + "siklar4 TEXT," + "cevap INTEGER" 
        + "zorluk INTEGER);"); 
} 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

     db.execSQL("DROP TABLE IF EXIST sorular"); 
     onCreate(db); 

} 

之后,我已经加入到DATAS数据库和我推到数据库模拟器。但是,当我关闭并重新运行应用程序时,它会从头开始重新创建数据库。所以,我的数据被删除。如何预防这个?我该怎么办?

+1

传入超类'SQLiteOpenHelper'构造函数的'version'号是什么? – laalto

+0

'version' number is 1 –

+0

“将数据库推送到模拟器上” - 所以你使用一些工具编辑数据库?确保[PRAGMA user_version(http://www.sqlite.org/pragma.html#pragma_schema_version)值保持不变(那就是'version'号)。 – laalto

回答

1

基于明确的意见,似乎你的SQLite数据库上的另一个SQLite数据库管理员编辑数据库时user_version号被覆盖。 Android使用此字段存储传入SQLiteOpenHelper构造函数的version编号,以及使用onUpgrade()onDowngrade()从另一版本升级数据库时。默认情况下,版本为0,所以当使用版本1 SQLiteOpenHelper时,你会从版本0升级到1,在你的情况下会破坏数据。

一些方法来缓解这个问题:

  1. 只有创建和使用Android辅助类编辑SQLite数据库。

  2. 实现非破坏性的onUpgrade(),即不丢弃表的表,只确保所需的表在那里,并根据需要从旧表迁移数据。

  3. 如果使用外部数据库管理器,请发出PRAGMA user_version=n; SQL命令以确保数据库版本为n。 (对不起,没有使用过Mozilla的工具,不知道它是否可以在那里以及如何实现)

+0

我已经解决了这个问题..谢谢你的关注 –