gpt4 book ai didi

Android SQLite 何时何地初始化 SQLiteOpenHelper

转载 作者:IT王子 更新时间:2023-10-29 06:29:19 36 4
gpt4 key购买 nike

我真的很难在我的应用程序中使用 SqlLite;

我已经设置了一个从 SQLiteOpenHelper 扩展的数据库助手类

public class DatabaseHelper extends SQLiteOpenHelper {

在 OnCreate 中我创建了大约 6 个表:

public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE myTestTable (Id INTEGER PRIMARY KEY , "
+ "info TEXT," +
+ "TopLeft TEXT")); <-- example insert

}

当我的应用程序启动时,我正在解析一些 xml 并将数据输入到表中,我已经检查了数据库并且所有内容都在其中并且我的表已正确创建。

当我去调用数据时,它不见了!我在我的 dbhelper 类中有很多不同的查询,并且在我重新初始化类的每个 Activity 中,这样我就可以在类中实现我的功能。

我认为这不是这样做的方法,因为它再次运行我的 oncreate 并删除我所有的表(或者至少这是在我尝试从它调用数据后检查数据库时它看起来正在做的事情而且是空的!

我的印象是 oncreate 只运行了一次,但显然情况并非如此,因为它似乎每次都在重新创建我的数据库并删除我的数据!

你打算在哪里初始化 dbhelper 类,你如何阻止它重新创建表?即使应用关闭,我也需要数据保留!

我很困惑!

如果这没有意义,请询问我如何澄清的具体问题!

更新

我发现我可以添加

CREATE TABLE IF NOT EXISTS

这会阻止它重新创建表,但每次调用 oncreate 似乎仍然不正确..

最佳答案

你可以在它周围放一个包装类吗?

public class DbAdapter
{

// database details
private static final String DATABASE_NAME = "dbname";
private static final int DATABASE_VERSION = 1;

// where we're running
private final Context mCtx;

private static class DatabaseHelper extends SQLiteOpenHelper
{
DatabaseHelper(Context context)
{
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db)
{
// your initial database create statements go here
db.execSQL(DATABASE_CREATE);
}

// if you need to recreate the database, you just up the version number
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
// drop commands for each table goes here
db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
onCreate(db);
}
}

public DbAdapter(Context ctx)
{
this.mCtx = ctx;
}

public DbAdapter open() throws SQLException
{
mDbHelper = new DatabaseHelper(mCtx);
mDb = mDbHelper.getWritableDatabase();
return this;
}

public void close()
{
mDbHelper.close();
}

// other database methods can go here
}

关于Android SQLite 何时何地初始化 SQLiteOpenHelper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5994207/

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