java - 我的数据库在调用 onDestroy() 后删除了所有行

标签 java android sql database android-cursorloader

我正在实现内容提供者的抽象方法“插入”以从在线资源中填充我的数据库。

我可以很好地使用内容提供程序运行查询,但是当我从内存中清除应用程序并重新启动时,内容提供程序查询返回空,因为数据库似乎是空的。

这是我的摘要插入...

@Override
public Uri insert(Uri uri, ContentValues contentValues) {
  if(!contentValues.containsKey("_id")) {
    // produce UUID
    contentValues.put("_id", UUID.randomUUID().toString());
  }

  long rtrn = db.insertWithOnConflict(DatabaseHelper.DATABASE_TABLE, null, contentValues, SQLiteDatabase.CONFLICT_REPLACE);
  String query = "SELECT _id, name, favourite FROM recipe";
  Cursor cursor = db.rawQuery(query, null);
  Log.d("D", "running cursor.getCount(): "+cursor.getCount());
  cursor.close();
  getContext().getContentResolver().notifyChange(uri, null);
  return uri;
}

logcat 显示运行游标计数与 insertWith 返回的“rtrn”行索引相同。所以数据输入成功。

但是在我的 fragment 中...

  SQLiteDatabase db = new DatabaseHelper(context).getWritableDatabase();
  String query = "SELECT _id, name, favourite FROM recipe";
  Cursor cursor = db.rawQuery(query, null);
  Log.d("D", "getCount(): "+cursor.getCount());
  cursor.close();

...它在调用 onDestroy() 并重新启动应用程序后报告空数据库。

如何让我的数据库内容持久化?数据在那里,但我没有正确访问它吗?我的应用程序调用 onDestroy() 并重新启动后如何访问数据库?

我在 onPause() 和 onStop() 以及 onDestroy() 中运行了以下调试代码。

Cursor cursor = this.getActivity().getContentResolver().query(uri, null, null, null, null);
Log.d("D", "Big getCount(): "+cursor.getCount());
cursor.close();

在日志中... onPause() 和 onStop() 报告来自数据库查询的 11 行。我的 Log.d 没有在 onDestroy() 中显示。

当我从内存中清除程序并重新启动时,代码再次返回零行。数据库为空。

最佳答案

看起来每次调用 onCreate 时您实际上都在重新创建数据库。 数据提供者:

public boolean onCreate() {
      db = new DatabaseHelper(getContext()).getWritableDatabase();
      return false;
    }

数据库助手:

private static final String DATABASE_CREATE =
    "create table recipe (_id char(36) primary key, name text null, instructions text null, favourite tinyint not null default 0, sync tinyint not null default 0, del tinyint not null default 0);";

@Override
public void onCreate(SQLiteDatabase db) {
  Log.d("D", "creating database!");
  db.execSQL(DATABASE_CREATE);
}

关于java - 我的数据库在调用 onDestroy() 后删除了所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31911103/

相关文章:

sql - 如何在 WHERE 子句中引用别名?

java - 在另一个中编译类时出现编译错误

java - 如何将 JSON 字符串转换为带有属性的 xml?

android - 服务如何监听触摸手势/事件?

java - 改造库的post方法错误

mysql - 联合语句仅给出引用一列的错误

mysql - 如何通过对两个表进行连接的字段进行过滤

java - Grails WAR 无法在 java 类中找到文件

java - 在java中传输二进制文件(数据)

java - ListView 填充时出现 NullPointerException