0

当我的应用程序第一次启动时,它需要创建它将使用的数据库。如果数据库尚不存在,我不知道应该在什么时候创建数据库,并且我不知道如何确保如果数据库已经存在,我不会尝试创建它。CreateTable目前,当我的应用程序中的第一个活动运行时,我执行以下工作:

protected override void OnCreate(Bundle bundle)
{
    base.OnCreate(bundle);
    base.SetContentView(Resource.Layout.SiteListLayout);

    DataManager.CreateTable<Site>();
    DataManager.CreateTable<PanelLog>();
    DataManager.CreateTable<Trace>();
}

基本上,这是可行的,因为该CreateTable方法会在创建表之前检查表是否已经存在。但是,我不喜欢轻率地运行一些代码的想法,因为它知道它会因为一些预期异常而失败。我宁愿更明确一点。

Therefore, how can I execute code the first time my app runs to test if the tables need to be created, and if so to create them? And any subsequent time my app runs it doesn't check that code.

4

3 回答 3

0

这是我用来创建或升级我的数据库的工具,它似乎工作得很好。这是来自网络上各种来源的黑客攻击。它创建 4 个表,除非它们已经存在。我没有包括静态变量,但这应该足够清楚吗?

private static class DatabaseHelper extends SQLiteOpenHelper {

    DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

        db.execSQL(DATABASE_CREATE);
        db.execSQL(DATABASE_CREATE_2);
        db.execSQL(DATABASE_CREATE_3);
        db.execSQL(DATABASE_CREATE_LIST_SUB);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
                + newVersion + ", which will destroy all old data");
        db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
        db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE_2);
        db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE_3);
        db.execSQL("DROP TABLE IF EXISTS " + DATABASE_LIST_SUB);
        onCreate(db);
    }
}
于 2013-08-01T08:32:45.107 回答
0

如果需要,可以在 main_activity 中创建数据库,如果有的话,甚至可以在启动屏幕活动中创建它。

只要不更改表名,它们只会被创建一次,这是第一次调用包含创建表命令的类。

更新

检查这个网站,你会发现一个非常简单的教程,有点长但很有帮助,如果你没有时间你可以尝试使用代码来创建你的表格。

于 2013-08-01T08:33:36.577 回答
0

您可以在 android 中使用其他数据存储选项。请查看http://developer.android.com/guide/topics/data/data-storage.html#filesInternal 。您可能会发现任何特定且安全的存储选项由单个应用程序使用,并且它们的生命周期将一直持续到您卸载该应用程序。因此,无论您是否创建了数据库,都将信息存储在其中,并在每次运行该应用程序时检查该存储空间。

于 2013-08-01T08:46:20.097 回答