Android SQLite 何时何地初始化 SQLiteOpenHelper

标签 android sqlite

我真的很难在我的应用程序中使用 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/

相关文章:

android - onClick 时获取其他 View 的值。数据绑定(bind)

java - 应用与您的设备不兼容。所有设备

android - 如何在亚马逊 ec2 上运行安卓模拟器?

sql - 如何使用多个 INNER JOIN 加速查询

java - Android 将位图以 PNG 格式上传到服务器

android 如何从数组中包含数组的json获取数据

java - 自定义 CursorAdapter 中出现 "Finalizing Cursor"错误的问题

android - 在 Android 上使用 phonegap 可以在单个事务上运行的 executeSql 语句的数量是否有限制?

android - 多个 Realm 的 Realm 唯一约束

ios - 如何在 uipickerview 中获取选定行的标题和值?