2017-06-29 4 views
-1

こんにちは私はプレイストアのメモ帳アプリケーションを持っており、ユーザーのデータを持っています...これらの新しい変更がないアプリは&インポートバックアップをエクスポートして問題なく完全に実行できます。以前のSQLiteOpenHelperアレンジメントを変更したとき、私は上記の新しい変更を元のアレンジメントに戻した場合を除いて、私が上記のことを何もしません。COLUMNの名前が変更された新しいデータベースを使用してexsiting Sqliteデータベースを移行するにはどうすればよいですか? Android

古いSQLiteOpenHelper配置

static final String DATABASE_NAME = "note.db"; 
    static final String TABLE_NOTE = "tb_note"; 
    static final String KEY_ID_NOTE = "id"; 
    private static final String KEY_TITLE_NOTE = "title"; 
    private static final String KEY_CONTENT_NOTE = "content"; 
    private static final String KEY_LAST_MODIFIED_NOTE = "last_modified"; 


    private static final String CREATE_TABLE_NOTE = 
      "CREATE TABLE " + TABLE_NOTE + "(" + 
        KEY_ID_NOTE + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL" + 
        ", " + KEY_TITLE_NOTE + " TEXT NOT NULL" + 
        "," + KEY_CONTENT_NOTE + " TEXT NOT NULL" + 
        "," + KEY_LAST_MODIFIED_NOTE + " TEXT DEFAULT \'\'" + 
        ")"; 


    private static final int DATA_VERSION = 2; 

しかし、私はアプリで1人の列名を変更し、私の新しいSQLiteOpenHelperは、私はこのコード

static final String DATABASE_NAME = "note.db"; 
    static final String TABLE_NOTE = "tb_note"; 
    static final String KEY_ID_NOTE = "id"; 
    private static final String KEY_TITLE_NOTE = "title"; 
    private static final String KEY_CONTENT_NOTE = "content"; 
    private static final String KEY_UPDATE_TIME = "update_time"; 


    private static final String CREATE_TABLE_NOTE = 
      "CREATE TABLE " + TABLE_NOTE + "(" + 
        KEY_ID_NOTE + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL" + 
        ", " + KEY_TITLE_NOTE + " TEXT NOT NULL" + 
        "," + KEY_CONTENT_NOTE + " TEXT NOT NULL" + 
        "," + KEY_UPDATE_TIME + " TEXT NOT NULL" + 
        ")"; 


    private static final int DATA_VERSION = 2; 
下に太字でこれらの行を変更する以外同じであるすべてのもののようになりました

は、彼らがこの

PRIVATのようでしたstatic final String KEY_LAST_MODIFIED_NOTE = "最後に変更された";

"" + KEY_LAST_MODIFIED_NOTE + "TEXTデフォルト\ '\'" +

が、今

プライベート静的最終文字列KEY_UPDATE_TIME = "UPDATE_TIME"。

"" + KEY_UPDATE_TIME + "TEXT NULL NOT" +

ついに今失うことなく、新しいものを使用してこのexsiting Sqliteをデータベースを移行する方法私のONUPGRADEコード

@Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // update database for database version < 2 
     if (oldVersion < 2) { 
      db.execSQL("ALTER TABLE " + TABLE_NOTE + " ADD COLUMN " + KEY_UPDATE_TIME + " TEXT DEFAULT \'\'"); 
     } 
    } 

ですどんなデータですか?

答えて

0

最初に古いテーブルの名前を変更し、古いテーブル名と更新された列名を持つ新しいテーブルを作成し、最初にテーブルの内容を新しく作成したテーブルにコピーし、古いテーブルを削除します。

@Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // change old table name 
     db.execSQL("ALTER TABLE "+orig_table_name +" RENAME "+ " TO "+ tmp_table_name; 
    // create new table with old table name and updated coulmn 
     db.execSQL("CREATE TABLE " + TABLE_NOTE + "(" + 
        KEY_ID_NOTE + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL" + 
        ", " + KEY_TITLE_NOTE + " TEXT NOT NULL" + 
        "," + KEY_CONTENT_NOTE + " TEXT NOT NULL" + 
        "," + KEY_UPDATE_TIME + " TEXT NOT NULL" + 
        ")"); 
// then insert old table data into new one 
db.execSQL(""INSERT INTO " + NEW_TABLE NAME + " SELECT * FROM " + OLD_TABLE_NAME"); 
//and finally delete old table 
db.execSQL("DROP TABLE "+OLD_TABLE_NAME); 
    } 

上記のすべてのクエリが正常に実行されたことを確認するには、sqliteブラウザを使用します。

+0

ありがとうございます@Anilそれはどのように動作するか見るためにそれを書くことができます...私のアプリがそれに依存しているので、本当に感謝します:) – Khamkhor

関連する問題