2016-04-22 2 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 сделать петлю на моей базе данных и просмотреть данные не посланных, я нашел старые данные, но я не понимаю, почему, потому что я удалить таблицу at 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.execSQL("DROP TABLE IF EXISTS " + TABLE_DEMANDES); в метод onUpgrade (так что это немного чище).

Проверьте документацию о 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, и я вызываю onCreate в onUpgrade, я не понимаю, где ошибка, если я отбрасываю таблицу в 2 случаях использования – Ben

+0

Не отбрасывайте таблицу в onCreate, делайте это только в onUpgrade. Каждый раз, когда вы хотите обновить номер версии инкремента. –

+0

Приятно, но у меня очень трудная проблема, это сложнее: у меня есть 2 строки, например, первое - это инкрементное число (id), а второе - это uuid для распознавания каждой пользовательской установки. Моя проблема состоит в том, чтобы не иметь столкновений с одним и тем же uuid и инкрементным числом, мне нужно изменить uuid и перезагрузить мою базу данных, если пользователь выполнит обновление или переустановку. – Ben

0

onCreate() вызывается, когда у вас нет базы данных вообще (так на новой установке). Когда вы устанавливаете обновление и версия базы данных отличается, то onUpdate() вызывается, чтобы вы, ну, обновляли базу данных. Если вы хотите установить новую версию независимо от ее обновления или нет, вам необходимо также удалить свою базу данных в onUpdate().

Для получения более подробной информации см. SQLOpenHelper docs.

EDIT

onUpdate() называется только на изменении версии DB, НЕ на обновления приложения. Поэтому в каждом обновлении приложения вы должны указывать DATABASE_VERSION, если вы хотите, чтобы SQLOpenHelper вступал в игру каждый раз.

+0

Если я отбрасываю таблицу в onCreate, и я вызываю onCreate в onUpgrade, я не понимаю, где ошибка, если я отбрасываю таблицу в 2 случаях использования. – Ben

+0

См. Отредактированный ответ. –

+0

Хорошо, я обновил свой вопрос, но вы говорите, что onUpgrade вызывается, изменяя версию, но если пользователь удалит приложение, я тоже потеряю данные? – Ben

Смежные вопросы