2016-05-09 7 views
-1

誰でも、sqliteopenhelperクラスのonUpgrade()の正しい使い方について助けてください。事前に感謝します。sqliteでのonUpgrade()の使用は何ですか?

+1

このリンクを確認してください。http://developer.android.com/intl/ru/reference/android/database/sqlite/SQLiteOpenHelper.html#onUpgrade(android.database.sqlite.SQLiteDatabase、int、int) ) –

+0

'onUpgrade()'に特有の問題は何ですか? – laalto

+0

実際に私は、ローカルデータベースに保存された多くのデバイスを持つホームオートメーションアプリケーションを持っています。私は、開発者が行った更新があれば、それがローカルデータベースにどのように反映されているのか疑いがあります。すべてのテーブルが交換された場合、私はすべてのデータを失うことになります。それでもバックアップするにはどうしますか?私を助けてください。 –

答えて

0

Sqliteopenhelperでは、データベースのバージョンを定義します。データベースのバージョンを変更するとonUpgrade()が実行されます。 onCreate()

あなたのonUpgradeでは、古いテーブルを削除して新しいテーブルを生成します。

小さな例があります:あなたは、データベースのテーブル要素または列の値を変更したとき

public class BaseDatabaseHandler extends SQLiteOpenHelper { 

    /******************************************************** 
    * Database 
    ********************************************************/ 
    private static final int DATABASE_VERSION = 4; 
    private static final String DATABASE_NAME = "test.db"; 


    /******************************************************** 
    * Table names 
    ********************************************************/ 
    protected static final String TABLE_INPUT = "input"; 


    /******************************************************** 
    * Column names 
    ********************************************************/ 

    /* Input*/ 
    protected static final String COLUMN_ID = "id"; 
    protected static final String COLUMN_NAME = "name"; 


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

    @Override 
    public void onCreate(SQLiteDatabase db) { 


     String CREATE_INPUT_TABLE = 
       "CREATE TABLE " + TABLE_INPUT + " (" 
        + COLUMN_ID + " LONG PRIMARY KEY, " 
        + COLUMN_NAME + " TEXT, " 
        + ")"; 


     db.execSQL(CREATE_INPUT_TABLE); 

    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_INPUT); 
     onCreate(db); 
    } 
} 
+0

親愛なるDteuchertさん、私の古いテーブルのデータについてreply.whatに感謝します。私のアプリケーションを更新すると失われますか?とにかく私のすべてのデータをバックアップすることはありますか?説明してください。 –

+0

ねえ、はい、このデータは失われます。古いデータを何らかの形で保存する関数をプログラムし、 'db.execSQL(" DROP TABLE IF EXISTS "+ TABLE_INPUT);の前にこの関数を呼び出すことができます。 – DTeuchert

1

、あなたはその変更を反映するために、データを更新するために必要では。他の賢明なテーブルや他の種類のエラーは発生しません。 アプリケーションがすでにアップロードされている場合は、データベースを変更した後、データベースのバージョンを変更し、すべてのすべてのテーブルをonUpdate()メソッドで再作成する必要があります。

関連する問題