当我的应用程序第一次启动时,它需要创建它将使用的数据库。我不知道我应该在什么时候创建数据库,如果它尚不存在,我不知道如何确保我不会尝试创建数据库(如果它已经存在)。目前,以下工作在我运行应用程序中的第一个活动时执行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
方法在创建表之前检查表是否已存在。但是,我不喜欢轻率运行一些代码的想法,知道它会因为它的期望有些例外而失败。我宁愿更明确。
因此,如何在我的应用程序第一次运行以测试是否需要创建表时执行代码,如果是,则创建它们?我的应用程序运行后的任何时间都不会检查该代码。
答案 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可能会发现任何特定且安全的存储选项供单个应用程序使用,并且它们的生命周期将在您卸载应用程序之前。因此,在其中存储您是否创建数据库的信息,并在每次运行该应用程序时检查该存储。