我的Android Sqlite数据库中存有旧数据

时间:2016-04-22 11:37:59

标签: android sqlite

我正在更新我的应用程序,目标是通过SOAP服务发送数据,我的想法是在每个应用程序更新时删除表,或者卸载和重新安装,所以我这样做:

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中删除了表,所以为什么我收回这些数据呢?我重新安装了我的应用程序。

更新:

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);
}

2 个答案:

答案 0 :(得分:1)

不要忘记增加数据库版本号。

并在size(x) = 700 x 4, size(y) = 700 x 1方法中移动db.execSQL("DROP TABLE IF EXISTS " + TABLE_DEMANDES);(所以它更清洁一点)。

查看有关onCreate()onUpgrade()

的文档

您可以跟踪日志记录发生的情况:

onUpgrade

首先尝试新安装的应用。然后增加DB版本,再次上传和测试。

答案 1 :(得分:1)

当你根本没有数据库时,会调用

onCreate()(所以在全新安装时)。当您安装更新数据库版本不同时,将调用onUpdate()以便您更新数据库。如果您想要全新安装,无论是否更新,您都需要将数据库放在onUpdate()中。

有关详细信息,请参阅SQLOpenHelper docs

修改

onUpdate()在数据库版本更改时被称为,在应用程序更新时被称为 NOT 。因此,如果您希望SQLOpenHelper每次都发挥作用,您必须在每个应用更新中碰到DATABASE_VERSION