2017-05-01 7 views
0

私のAndroidアプリケーションでは、ORMLiteを使用してローカルデータベースにデータを格納しています。onUpgrade()メソッドを使用してそのデータベースにカラムを追加すると、そのテーブルは消去されます。 私はORMLiteのドキュメントに記載upgrade schema方法を使用しています: ORMLiteテーブルにカラムを追加するときにデータをドロップする

private static final int DATABASE_VERSION = 10; 
@Override 
public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int oldVer, int newVer) { 

    try { 
     if(oldVer < 10){ 
      getGuardiansDao().executeRaw("ALTER TABLE `messages` ADD COLUMN updated_by TEXT;"); 
      getGuardiansDao().executeRaw("ALTER TABLE `messages` ADD COLUMN updated_by_time TEXT;"); 
     } 

     } catch (SQLException e) { 
      Log.e(DBManager.class.getName(), "Unable to upgrade database from version " + oldVer + " to new " 
       + newVer, e); 
     } 
} 

そして、そのテーブルに割り当てられたクラスで

@DatabaseTable(tableName = "messages") 
public class Message extends Object implements Parcelable{ 

. 
. 
. 
    @DatabaseField 
    private String updatedBy; 

    @DatabaseField 
    private String updatedByTime; 

} 

今では、テーブルに格納されているすべてのデータを消去することを実行した後messagesと私はそれがなぜ起こっているのか何か手がかりがありません。

+0

あなたは正しいです。実際、それは非常にばかげた間違いです。深刻なチェックの後、割り当てられたクラスのデュオの名前で新しい列名をわずかに変更することができない私は世話をしませんでした、なぜ前に現れていなかったのかわかりませんが、それが理由でした。 –

答えて

0

今すぐ実行すると、テーブルメッセージに格納されているすべてのデータが消去され、その理由がわかりません。

あなたが投稿したコードは、テーブルを消去せず、ORMLiteが自動的に行うものではありません。代わりに何らかの理由でonCreate(...)メソッドが呼び出されている可能性はありますか?

これをデバッグする方法はたくさんありますが、onUpgrade(...)メソッドのrawステートメントを使用してテーブルの内容を記録して、テーブルが正しく構築されていることを確認することができます。次に、それがクリアされたときを検出することができます。

関連する問題