我什么时候应该在我的应用程序中创建我的Sqlite数据库?

时间:2013-08-01 08:13:02

标签: android sqlite xamarin.android xamarin

当我的应用程序第一次启动时,它需要创建它将使用的数据库。我不知道我应该在什么时候创建数据库,如果它尚不存在,我不知道如何确保我不会尝试创建数据库(如果它已经存在)。目前,以下工作在我运行应用程序中的第一个活动时执行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方法在创建表之前检查表是否已存在。但是,我不喜欢轻率运行一些代码的想法,知道它会因为它的期望有些例外而失败。我宁愿更明确。

因此,如何在我的应用程序第一次运行以测试是否需要创建表时执行代码,如果是,则创建它们?我的应用程序运行后的任何时间都不会检查该代码。

3 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分:0)

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

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

<强>更新

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

答案 2 :(得分:0)

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