2017-01-04 8 views
4

Meine vorhandenen App-Daten sind auf SQlite. Ich versuche die Daten von Sqlite nach Realm zu migrieren. Ich google, wie man Daten migriert, aber fand keine Lösung in Verbindung damit.Migrieren von Sqlite zu Realm (Android)

Ich plane, eine Update-Version der bestehenden App zu starten. Beim Aktualisieren der App müssen die Daten in den Bereich migrieren und die vorhandene SQLite-Datenbank muss gelöscht werden. Bitte teilen Sie eine Idee mit der Lösung wenn möglich.

Antwort

7

Angenommen, Sie haben die TODO-Liste in DataBase (SqlLite) gespeichert und möchten sie in die Realm-DB migrieren.

SqlLite Schnittstelle für die TODO Artikel Tabelle

interface TodoItemModel { 
    String CREATE_TABLE = "" 
      + "CREATE TABLE todo_list(\n" 
      + " _id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,\n" 
      + " name TEXT NOT NULL,\n" 
      + ")"; 
    String TABLE_NAME = "todo_item"; 

    //columns 
    String _ID = "_id"; 
    String NAME = "name"; 
} 

Realm Objekt für den ToDo Artikel

public class TodoItem extends RealmObject { 

    @PrimaryKey 
    private Long _id; 
    private String name; 

    public TodoItem() { 
    } 

    public TodoItem(long id, String name) { 
     this._id = id; 
     this.name = name; 
    } 
} 

Schritt 1. Erhöhen Sie die Version des DB, wo Sie SQLiteOpenHelper erweitern (dh: DbOpenHelper-Klasse ist unten angegeben).

Schritt 2. In der DbOpenHelper-Klasse, die onUpgrade-Funktion verwendet, können Sie die Version überprüfen und alle Ihre SqlLite-Datensätze in der Realm-Datenbank speichern.

final class DbOpenHelper extends SQLiteOpenHelper { 

    //private static final int PREVIOUS_VERSION = 1; 
    private static final int CURRENT_VERSION = 2; 

    public DbOpenHelper(Context context) { 
     super(context, "todo.db", null /* factory */, CURRENT_VERSION); 
    } 


    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL(TodoItemModel.CREATE_TABLE); 
    } 


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

     if (oldVersion < CURRENT_VERSION) { 
      //get all the stored data in your db 
      List<TodoItem> list = select_all_items_for_list(db); 

      //open the realm transaction and store the list of todo's 
      Realm realm = Realm.getDefaultInstance(); 
      realm.beginTransaction(); 
      realm.insertOrUpdate(list); 
      realm.commitTransaction(); 
      //finally drop table 
      db.execSQL("DROP TABLE IF EXISTS " + TodoItemModel.TABLE_NAME); 
     } 
    } 

    private List<TodoItem> select_all_items_for_list(SQLiteDatabase db) { 
     List<TodoItem> list = new ArrayList<>(); 
     Cursor cursor = db.rawQuery("select * from " + TodoItemModel.TABLE_NAME, new String[0]); 

     if (cursor == null) 
      return list; 

     for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) { 
      final TodoItem todoItem = new TodoItem(cursor.getLong(cursor.getColumnIndex(TodoItemModel._ID)), cursor.getString(cursor.getColumnIndex(TodoItemModel.NAME)); 
      list.add(todoItem); 
     } 
     cursor.close(); 

     return list; 
    } 
} 
+0

Lassen Sie mich wissen, wenn ich etwas vermisse. –

+0

Ich werde es versuchen. Danke für Ihre Lösung. –

+0

Markieren Sie es als eine Antwort, wenn die Lösung auf Ihre Frage antwortet. –

Verwandte Themen