使用SQLiteOpenHelper执行create table语句时如何停止删除数据库

时间:2014-07-04 23:00:22

标签: android sqlite sqliteopenhelper

我有一个数据库,我在资产目录的SQLite中创建。当我在Android模拟器中安装应用程序时,如果该表不存在,则会创建一个特定的表,但是当它执行此操作时,它会删除其余的表。我想要做的是,当它创建一个表时,其他表应该保留在数据库中而不是删除。我不知道出了什么问题,或者我放弃了整个数据库。

这是我的SQLiteHelper:

public class YAOMySQLiteHelper extends SQLiteOpenHelper {
  ...
  private static final String DATABASE_NAME = "YAOMasterDB.db";
  private static final int DATABASE_VERSION = 1;

  public YAOMySQLiteHelper(Context context) {
      super(context, DATABASE_NAME, null, DATABASE_VERSION);
  }

  private static final String DATABASE_CREATE_2 =
      "Create Table " + TABLE_DECK_LIST+ " AS SELECT SUBSTR(Name,11) AS DECK_LIST FROM sqlite_master WHERE type='table' AND Name like 'Deck Name %'";
      //  " SELECT SUBSTR(Name,11) AS DECK_LIST FROM sqlite_master WHERE type='table' AND Name like 'Deck Name %'; ";

  public static final String DROP_DECK_LIST_TABLE =
      "DROP TABLE IF EXISTS " + TABLE_DECK_LIST;

  @Override
  public void onCreate(SQLiteDatabase database) {
      database.execSQL(DROP_DECK_LIST_TABLE);
      database.execSQL(DATABASE_CREATE_2);
  }

  @Override
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
      Log.w(YAOMySQLiteHelper.class.getName(),
          "Upgrading database from version " + oldVersion + " to "
          + newVersion + ", which will destroy all old data");
      db.execSQL("DROP TABLE IF EXISTS " + TABLE_DECK_LIST);

      onCreate(db);
  }
}

1 个答案:

答案 0 :(得分:1)

SQLiteOpenHelper class旨在允许您的应用使用onCreate onUpdate方法中的SQL语句创建数据库。

此数据库文件在应用程序的数据目录中创建。 什么都没有删除;你应用程序永远不会访问assets文件夹中的数据库文件。

要使用assets文件夹中的数据库,您必须从那里复制它。 最简单的方法是使用SQLiteAssetHelper等类。