我真的很难在我的应用程序中使用SqlLite;
我已经设置了一个从SQLiteOpenHelper扩展的数据库助手类
public class DatabaseHelper extends SQLiteOpenHelper {
Run Code Online (Sandbox Code Playgroud)
在OnCreate中我创建了大约6个表:
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE myTestTable (Id INTEGER PRIMARY KEY , "
+ "info TEXT," +
+ "TopLeft TEXT")); <-- example insert
}
Run Code Online (Sandbox Code Playgroud)
当我的应用程序启动时,我正在解析一些xml并将数据输入到表中,我已经检查了数据库,所有数据都在那里,我的表格正确创建.
当我去调用数据时,它就消失了!我在dbhelper类和每个活动中有很多不同的查询;我重新启动了类,这样我就可以在类中获取我的函数.
我认为这不是这样做的方式,因为它再次运行我的oncreate并擦除我的所有表(或者至少这是在我尝试从它调用数据并且它为空时我检查数据库时它似乎正在做的时候!
我的印象是oncreate只运行了一次,但显然并非如此,因为它似乎每次都在重新创建我的数据库并擦除我的数据!
你想在哪里初始化dbhelper类,你如何停止重新创建表?即使应用程序关闭,我也需要数据保持不变!
我糊涂了!
如果这没有意义,请询问具体问题我如何澄清它!
UPDATE
我发现我可以添加
CREATE TABLE IF NOT EXISTS
Run Code Online (Sandbox Code Playgroud)
这会阻止它重新创建表格,但是每次调用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
}
Run Code Online (Sandbox Code Playgroud)