【发布时间】:2011-01-07 23:55:51
【问题描述】:
我想一次性创建数据库和所有数据,并在以后需要时更新一些数据。在我阅读的大部分教程中,它们使用两个类:一个扩展 SQLiteOpenHelper,另一个简化数据操作。例如:
public class EventsData extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "events.db";
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_CREATE = "CREATE TABLE " + TABLE_NAME + "(" + ID + " INT, " + TITLE + " TEXT, " + UNLOCK + " INT)";
private static final String DATABASE_UPGRADE = "DROP TABLE IF EXISTS " + TABLE_NAME;
public EventsData(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL(DATABASE_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL(DATABASE_UPGRADE);
onCreate(db);
}
}
public class DataHelper {
private static final String[] FROM = {ID, TITLE, UNLOCK};
//private static final String ORDER_BY = UNLOCK + " DESC";
private Context context;
private SQLiteDatabase db;
private EventsData eventsData;
public DataHelper(Context context) {
this.context = context;
eventsData = new EventsData(this.context);
}
public void addEvent(int id, String name, int unlocked) {
db = eventsData.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(ID, id);
cv.put(TITLE, name);
cv.put(UNLOCK, unlocked);
db.insertOrThrow(TABLE_NAME, null, cv);
}
public void updateEvent(int id, String name, int unlocked) {
db = eventsData.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(ID, id);
cv.put(TITLE, name);
cv.put(UNLOCK, unlocked);
db.update(TABLE_NAME, cv, ID + "=" + id, null);
}
public Cursor getEvent() {
db = eventsData.getReadableDatabase();
Cursor cursor = db.query(TABLE_NAME, FROM, null, null, null, null, null);
return cursor;
}
public StringBuilder showEvent(Cursor cursor) {
StringBuilder sb = new StringBuilder();
while (cursor.moveToNext()) {
String id = cursor.getString(0);
String title = cursor.getString(1);
String unlock = cursor.getString(2);
sb.append(id).append(": ");
sb.append(unlock).append(": ");
sb.append(title).append("\n");
}
return sb;
}
public void deleteAll() {
db = eventsData.getWritableDatabase();
db.delete(TABLE_NAME, null, null);
}
}
在我的主要活动中,我创建了一个 DataHelper 实例并调用 addEvent() 来创建数据并将其添加到数据库中。但是每次应用程序启动时,即使我要调用 updateEvent(),它也会“重置”所有数据。
【问题讨论】: