gpt4 book ai didi

java - Android sql一次创建数据库

转载 作者:搜寻专家 更新时间:2023-10-30 21:53:50 24 4
gpt4 key购买 nike

我想一次创建数据库和所有数据,并在需要时更新一些数据。在我阅读的大部分教程中,它们使用两个类:一个扩展 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);
}

在我的主要 Activity 中,我创建了一个 DataHelper 实例并调用 addEvent() 来创建数据并将其添加到数据库中。但是每次应用程序启动时,它都会“重置”所有数据,即使我调用了 updateEvent()。

最佳答案

您可以使用 DBVersion 来控制此行为。

如果你正在扩展 SQLiteOpenHelper,你可以在构造函数中传递 DBVersion。代码 fragment 如下。

private static final int DATABASE_VERSION = 1;
public MyDBHelper(Context context) {
super(context, DB_NAME, null, DATABASE_VERSION);
}

查看属性版本 doco http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html#SQLiteOpenHelper%28android.content.Context,%20java.lang.String,%20android.database.sqlite.SQLiteDatabase.CursorFactory,%20int%29

任何必须第一次(仅)执行的代码都需要添加到 onCreate() 方法中。后续要控制数据库更改(例如,更改表、更新表等)应在 onUpdate 中处理。

希望这对您有所帮助。

关于java - Android sql一次创建数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4631380/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com