2011-08-11 32 views
1

每次我从Eclipse发送我的应用程序的新版本到我的手机(我正在开发和更改我的数据库频繁),我会擦除和重新创建我的应用程序的数据库。什么是最简单的方法来做到这一点?Android:摆脱你的SQLite数据库

回答

0

如果这是您不希望做的事情,那么您可以每次清除应用程序管理器中的数据。另外,还可以使数据库的版本号不同,有onUpgrade破坏并重新创建DB

private static final String DATABASE_NAME = "MyDbName"; 
private static final int DATABASE_VERSION = 6; 
private static class DbOpenHelper extends SQLiteOpenHelper{ 

public DbOpenHelper(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    onUpgrade(this.getWritableDatabase(), 0, 0); 
     // 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL(TableHelper1.CREATE_TABLE_QUERY); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     db.execSQL("DROP TABLE IF EXISTS "+ TableHelper1.TABLE_NAME); 

     onCreate(db); 
    } 

} 
+0

在升级功能中执行此操作的最佳方法是,删除所有表,然后调用onCreate函数? – tjb

+1

您通常在SQLiteOpenHelper中有一个指定数据库版本的字段,并将其传递给构造函数:public SQLiteOpenHelper(上下文上下文,字符串名称,SQLiteDatabase.CursorFactory工厂,int版本)。当你准备好替换数据库时,只需增加版本即可。 – aha

+0

Pyrodante,请检查并接受我的编辑,这会在每次重新启动时更新数据库。一旦干净安装它将不幸被创建和销毁两次 – tjb

0

在Eclipse中,进入调试配置,然后进入左侧的Android应用程序。选择您正在使用的调试配置,然后选择目标选项卡。

在底部,您会看到一个标记为“擦除用户数据”的复选框。

如果您检查,每次启动模拟器时,与您的应用程序(包括SQLite数据库)相关的数据都将被删除。

然后,您的应用程序将为您的SQLiteOpenHelper调用onCreate(),并重新创建您的数据库。

+0

这是不可取的,因为人们不得不重新启动模拟器,这肯定比更新版本更耗时。它不适用于在手机上进行调试,而不适用于仿真器。 – aha

2
public class DatabaseHelper extends SQLiteOpenHelper { 

public DatabaseHelper(Context context) { 
    super(context, dbName, null, 1); 

} 
@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL("CREATE TABLE USERS (username TEXT, password TEXT);"); 
} 
@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("DROP TABLE IF EXISTS USERS"); 
    onCreate(db); 
} 

我用这个在我的代码:)变化超(背景下,数据库名,空,<数据库版本数>);它会执行onUpgrade方法。