gpt4 book ai didi

Android Studio SQLite onUpgrade

转载 作者:行者123 更新时间:2023-11-30 05:01:50 31 4
gpt4 key购买 nike

您好,我目前正在开发一款语言词典应用。该数据库来 self 手动输入的 SQLite 数据库。该应用程序的特点是用户可以要求添加任何不在列表中的单词,因此每次更新应用程序时我都必须手动更新数据库。

问题是,每次我更改数据库数据时,列表都没有更新,当我更改版本号时,应用程序崩溃了。

我该如何处理这个问题?那里的教程只展示了如何在实时输入或添加列时执行此操作,而 main 仅用于添加行和在现有数据库上。谢谢。

这是我的 DataBaseHelper 类

public class DataBaseHelper extends SQLiteAssetHelper {

private static final String DB_Name = "kamus_db";
private static final int DB_VER = 1;

private static final String TB_DATA = "tb_data";
private static final String COL_ID = "_id";
private static final String COL_TURKI = "turki";
private static final String COL_ISTILAH ="istilah";
private static final String COL_INDONESIA = "indonesia";

private static DataBaseHelper dbInstance;
private static SQLiteDatabase db;

private DataBaseHelper(Context ctx) {
super(ctx, DB_Name, null, DB_VER);
}

static DataBaseHelper getInstance(Context ctx) {
if (dbInstance == null) {
dbInstance = new DataBaseHelper(ctx);
db = dbInstance.getWritableDatabase();
} return dbInstance;
}

@Override
public synchronized void close() {
super.close();
if (dbInstance != null) {
dbInstance.close();
}
}

List<Kamus> getAllKamus() {
List<Kamus> kamusList = new ArrayList<>();

Cursor cursor = db.query(TB_DATA, new String[] {
COL_ID, COL_TURKI, COL_ISTILAH, COL_INDONESIA
}, null, null, null, null, null);

if (cursor.getCount() >= 1 ) {
cursor.moveToFirst();

do {
Kamus kamus = new Kamus();
kamus.setTurki(cursor.getString(cursor.getColumnIndexOrThrow(COL_TURKI)));
kamus.setIstilah(cursor.getString(cursor.getColumnIndexOrThrow(COL_ISTILAH)));
kamus.setIndonesia(cursor.getString(cursor.getColumnIndexOrThrow(COL_INDONESIA)));
kamusList.add(kamus);
} while (cursor.moveToNext());
} return kamusList;
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

String TAG = "TAG";

Log.w(TAG, "Upgrading database. Existing contents will be lost. ["
+ oldVersion + "] -> [" + newVersion + "]");

db.execSQL("DROP TABLE " + TB_DATA);
onCreate(db);

}

}

最佳答案

当您使用 SQLiteAssetHelper 时,您应该引用 ReadMe - Database Upgrades .

您可能想查看Upgrades via overwrite 部分并调用 setForcedUpgrade() 方法(如果用户不更新数据库),这将用更新后的数据库替换数据库。

如果用户确实更新了数据库,那么需要做什么取决于所做的更改。如果需要,您可能需要编写将保留数据的代码。

关于Android Studio SQLite onUpgrade,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58109122/

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