2016-04-22 20 views
0

私は自分のアプリのアップデートをやっていますが、これはSOAPサービスを使ってデータを送信することです、私のアイデアは各アプリケーションのアップデート時にテーブルをドロップするか、再インストールので、私はやった、この:古いデータはAndroid Sqliteデータベースに保存されています

private static final int DATABASE_VERSION = 2; 
private static final String DATABASE_NAME = "name.db"; 
private static final String TABLE_DEMANDES = "demandes"; 
private static final String KEY_ID = "id"; 
private static final String KEY_XML = "xml"; 
private static final String KEY_STATUTENVOIE = "statutEnvoie"; 
private static final String KEY_DATEENVOIE = "dateEnvoie"; 

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


@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_DEMANDES); 
    String CREATE_DEMANDES_TABLE = "CREATE TABLE " + TABLE_DEMANDES + "(" + KEY_ID + " INTEGER PRIMARY KEY," + KEY_XML + " TEXT," + KEY_STATUTENVOIE + " INTEGER," + KEY_DATEENVOIE + " DATETIME" + ")"; 
    db.execSQL(CREATE_DEMANDES_TABLE); 
} 

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

しかし、私のSOAPサービスは、私のデータベース上でループを行うと、送信されていないデータを見ると、私は古いデータを見つけたが、私はテーブルを削除するために、なぜ私は理解していませんonCreateでは、なぜこのデータを取得するのですか?私は私のアプリを再インストールしました。

UPDATE:

private static final int DATABASE_VERSION = 3; 
private static final String DATABASE_NAME = "name.db"; 
private static String DB_NAME = "Solutis"; 
private static final String TABLE_DEMANDES = "demandes"; 
private static final String KEY_ID = "id"; 
private static final String KEY_XML = "xml"; 
private static final String KEY_STATUTENVOIE = "statutEnvoie"; 
private static final String KEY_DATEENVOIE = "dateEnvoie"; 

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


@Override 
public void onCreate(SQLiteDatabase db) { 
    String CREATE_DEMANDES_TABLE = "CREATE TABLE " + TABLE_DEMANDES + "(" + KEY_ID + " INTEGER PRIMARY KEY," + KEY_XML + " TEXT," + KEY_STATUTENVOIE + " INTEGER," + KEY_DATEENVOIE + " DATETIME" + ")"; 
    db.execSQL(CREATE_DEMANDES_TABLE); 
} 

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

答えて

0

DBのバージョン番号をインクリメントすることを忘れないでください。

onUpgradeの方法でdb.execSQL("DROP TABLE IF EXISTS " + TABLE_DEMANDES);を移動してください(ビットクリーナーなので)。

onCreate()onUpgrade()についてのドキュメントを確認してください。

あなたは、ロギングで何が起こっているのか追跡することができます:

public void onCreate(SQLiteDatabase db) { 
    Log.i("MYDB", "onCreate " + DATABASE_VERSION); 
... 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    Log.i("MYDB", "onUpgrade: old " + oldVersion + " new " + newVersion); 

は、最初にインストールしたばかりのアプリを試してみてください。次に、DBのバージョンを増やし、アップロードしてもう一度テストします。

+0

onCreateにテーブルをドロップし、onUpgradeでonCreateを呼び出すと、2つのユースケースでテーブルを削除すると、どこにエラーがあるのか​​分かりません – Ben

+0

onCreateでテーブルを削除しないでください。 onUpgrade。増加するバージョン番号をアップグレードするたびに。 –

+0

いいですが、私は本当に難しい問題ですが、もっと難しいです:私は2行目がexempleで、最初はインクリメンタルな番号(id)で、2番目は各ユーザーのインストールを認識するためのuuidです。私の問題は、同じuuidと増分の数字が衝突しないようにすることです.Uuidを変更して、ユーザーがアップデートや再インストールを行うと、データベースをリロードする必要があります。 – Ben

0

onCreate()は、データベースがまったくない場合(新規インストールの場合)に呼び出されます。アップデートデータベースのバージョンが異なる場合、onUpdate()が呼び出され、データベースが更新されます。アップデートの有無にかかわらず新しくインストールしたい場合は、データベースをonUpdate()にもドロップする必要があります。

詳細はSQLOpenHelper docsを参照してください。

EDIT

onUpdate()は、アプリケーションの更新時にDBのバージョン変更にのみませと呼ばれています。したがって、SQLOpenHelperを毎回再生するには、各アプリのアップデートでDATABASE_VERSIONをバンプする必要があります。

+0

テーブルをonCreateにドロップし、onUpgradeでonCreateを呼び出すと、2つのユースケースにテーブルをドロップすると、どこにエラーがあるのか​​分かりません。 – Ben

+0

編集された答えを参照してください。 –

+0

私の質問を更新しましたが、バージョンを変更してonUpgradeを呼び出すと言っていますが、ユーザーがアプリをアンインストールするとデータも失われますか? – Ben

関連する問題