1

Androidアプリケーションに新しい列を追加するなど、データベースに変更を加えた場合。そして、すでにそれを自分の電話にインストールしている場合。モバイルでそのアプリケーションを再インストール/更新すると、データベースの変更が更新されません。

私のデータベースコードは次のとおりです。

package com.screenmagic.smsmagicmobileapp;

import java.text.SimpleDateFormat;
import java.util.Date;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;


public class DatabaseHandler extends SQLiteOpenHelper {


private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "Test";


public DatabaseHandler(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
    Log.d(TAG, "onCreate OF DatabaseHandler");

    db.execSQL("DROP TABLE IF EXISTS history");
    String CREATE_SMS_HISTORY_TABLE = "CREATE TABLE  history("+
    "id INTEGER PRIMARY KEY AUTOINCREMENT, mobileNumber TEXT, smsText TEXT)";
    Log.d("Insert: ", "Table create query:: "+ CREATE_SMS_HISTORY_TABLE);
    db.execSQL(CREATE_SMS_HISTORY_TABLE);
    Log.d("Insert: ", "Table created ..");

}

// Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS sms_history");
    onCreate(db);
}


}
4

1 に答える 1

1

onUpgrade (オーバーライドとして) メソッドを使用するだけで、データベースのアップグレードをそこに置くことができます。このようにして、アプリケーションが既にインストールされている場合、既存のデータが吹き飛ばされることはありません。

そして、現在行っているようにテーブルをドロップしないようにしてください:

db.execSQL("DROP TABLE IF EXISTS sms_history");

メソッドのリファレンスはこちら、実装方法のビデオはこちら

于 2013-01-09T12:29:40.567 に答える