我正在更新我的应用程序,目标是通过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);
}
答案 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
。