应用程序执行一次后,将新表添加到数据库

时间:2011-12-07 05:30:20

标签: android sql sqlite

我正在Android中创建一个简单的数据库。我想在代码执行一次后添加新表。现在,每当我尝试在EventDataSqlHelper类中更改我的onCreate()方法时,我的应用程序崩溃了。

这可能是因为与onCreate()关联的SQLiteOpenHelper仅在首次运行应用时执行,我们无法对其进行进一步修改。

我还尝试编写一个单独的函数来添加新表。它在第一次执行时效果很好。但是在第二次执行时它会覆盖以前的数据库,因此会导致应用程序崩溃。

如果已经创建了数据库,有没有办法将新表添加到数据库?

package org.example.sqldemo;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.provider.BaseColumns;
import android.util.Log;

/** Helper to the database, manages versions and creation */
public class EventDataSQLHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "events.db";
    private static final int DATABASE_VERSION = 1;

    // Table name
    public static final String TABLE = "events";

    // Columns
    public static final String TIME = "time";
    public static final String TITLE = "title";

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

    @Override
    public void onCreate(SQLiteDatabase db) {
        String sql = "create table " + TABLE + "( " + BaseColumns._ID
                + " integer primary key autoincrement, " + TIME + " integer, "
                + TITLE + " text not null);";
        Log.d("EventsData", "onCreate: " + sql);
        db.execSQL(sql);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {


    }


}

2 个答案:

答案 0 :(得分:8)

这是onUpgradeDATABASE_VERSION的用途。

示例:

  • 您有一张表events,并在手机上执行。
  • 现在您决定要一个新表users

    1. 更改DATABASE_VERSION = 2;(这是您的版本号)
    2. onCreate()中,创建所有表格(create table events& create table users
    3. onUpgrade()中,创建在版本 oldVersion newVersion create table users
    4. 之间更改的所有表格
  • 稍后,如果您要添加新表,请再次增加DATABASE_VERSION,并在onCreate中创建所有表格,并在onUpgrade

  • 中进行更改

答案 1 :(得分:2)

您可以使用CREATE TABLE IF NOT EXISTS TABLENAME ...作为查询,但不会覆盖现有的表格。