应用程序因每次启动时创建Db而崩溃

时间:2010-12-24 05:54:02

标签: android sqlite crash

我有一个应用程序,我正在尝试创建一个数据库。在第一次运行时,应用程序正常工作。随后启动的应用程序崩溃了。该错误是因为应用程序正在尝试再次创建数据库。

所以我想知道如何创建一个或多个数据库,如果它们不存在或仅在应用程序第一次运行时。

2 个答案:

答案 0 :(得分:4)

SQLite has CREATE TABLE IF NOT EXISTS命令。你可以试试。

  

尝试在已包含同名的表,索引或视图的数据库中创建新表通常是错误的。但是,如果将“IF NOT EXISTS”子句指定为CREATE TABLE语句的一部分并且已存在同名的表或视图,则CREATE TABLE命令将无效(并且不会返回任何错误消息)。如果由于现有索引而无法创建表,则仍会返回错误,即使指定了“IF NOT EXISTS”子句也是如此。

答案 1 :(得分:4)

您可以扩展SQLiteOpenHelper类来处理数据库的不同版本。这是一个例子:

public class MyDbOpenHelper extends **SQLiteOpenHelper** {
    final static int VERSION = 2;

    public MyDbOpenHelper(Context context, String dbname) {
        super(context, dbname, null, VERSION);
    }

    @Override
    public void **onCreate**(SQLiteDatabase db) {
        /* TODO SQL-Queries for new Database */
    }

    @Override
    public void **onUpgrade**(SQLiteDatabase db, int oldVersion, int newVersion) {
        /* SQL-Queries t*/
        if (oldVersion < 2) {
            db.execSQL("ALTER TABLE my_table ADD COLUMN new_attrubte INTEGER");
        }
    }
}

数据库句柄是onCreate中的新增内容,如果存在,则使用oldVersion参数中的现有版本号调用onUpgrade。