2011-12-07 39 views
5

我正在Android中創建一個簡單的數據庫。我想在我的代碼執行一次後添加新表。現在,每當我嘗試在EventDataSqlHelper類中更改我的onCreate()方法時,我的應用程序崩潰。在應用程序執行一次之後向數據庫添加新表格

這可能是因爲與SQLiteOpenHelper關聯的onCreate()僅在應用第一次運行時執行,我們無法對其進行進一步修改。

我也試着寫一個單獨的函數來添加新表。它在第一次執行時完美運行。但自第二次執行以來,它將覆蓋其先前的數據庫,因此導致應用程序崩潰。

如果數據庫已經創建,有什麼辦法可以向數據庫添加新表?

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) { 


    } 


} 

回答

8

這就是onUpgradeDATABASE_VERSION的用途。

例子:

  • 你有一個表events,並在手機上執行。
  • 現在你決定,你想要一個新表users

    1. 變化DATABASE_VERSION = 2;(這是你的版本號)在onCreate()
    2. ,創建所有表(create table events & create table users)在onUpgrade()
    3. ,創建一個版本oldVersionNEWVERSION之間發生改變的所有表( create table users
  • 以後如果要添加新表,再增加DATABASE_VERSION,並在onCreate創建的所有表,並在onUpgrade

2

您可以使用CREATE TABLE IF NOT EXISTS TABLENAME ...作爲您的查詢,這將不會覆蓋您的現有表。

相關問題