4

データベースとして Sqlite を使用している Android アプリケーションがあります。次のテーブルがあります。

  1. ホテル
  2. 場所
  3. お気に入り

生のデータベース ファイルを assests フォルダーに保存しています。ユーザーがアプリをインストールすると、このデータベースを /data/data/package_name/databases ディレクトリにコピーするだけFavoritesです。いくつかのバグ修正といくつかの新しいホテルをデータベースに追加してアプリの更新バージョンを起動したいので、既存のユーザーのデータベースを、お気に入りテーブルに影響を与えずに新しいホテルと場所で更新する必要があります。データベースのバージョン番号を更新すると、アプリケーションは古いデータベースを削除して新しいデータベースを使用しますが、お気に入りテーブルのすべてのデータが失われます。それが発生したくありません。問題は、お気に入りのデータを失わずにテーブルを更新する方法HotelsですLocations。テーブル。

4

3 に答える 3

2

この質問はずっと前に尋ねられたことは知っていますが、同様の問題があり、解決策を共有したかったのですが、うまくいくようです。初心者ですので、どなたか教えてください(-.

 @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        //code to keep table data
        List<obj> objList = new ArrayList<obj>();

    String selectQuery = "SELECT score,list_name,quiz_length FROM obj_table";

    Cursor cursor = db.rawQuery(selectQuery, null);

    // looping through all rows and adding to list
    if (cursor.moveToFirst()) {
        do {
            obj o = new obj();
            o.final_score = cursor.getInt(0);
            o.quiz_name = cursor.getString(1);
            o.quiz_length = cursor.getInt(2);
            objList.add(o);
        } while (cursor.moveToNext());
    }

    //done storing data, now upgrade DB from asset file
    try {
                 //my db file is upgraded here
        copyDataBase(); 
    } catch (IOException e) {

    }

    //now insert our saved table data
    for (Score obj_rec: objList){

          ContentValues values = new ContentValues();
          values.put("score", obj_rec.final_score);
          values.put("list_name", obj_rec.quiz_name);
          values.put("quiz_length", obj_rec.quiz_length);

          db.insert("obj_table", null, values);
    }
}
于 2014-01-23T16:35:31.170 に答える
1
  1. 更新する前に、前のテーブルの内容をファイルに書き込み、SD カードに保存します。

  2. その後、データベースを新しいバージョンで更新できます。

  3. そして、それを行った後、バックアップファイル(SDカードから)から更新されたデータベースにデータをコピーバックします。バックアップが正常にコピーされたら、SD カードからファイルを削除します。

于 2013-06-24T06:14:13.627 に答える