【问题标题】:SQLite statement aborts, database locked in Android appSQLite 语句中止,数据库锁定在 Android 应用程序中
【发布时间】:2016-02-05 08:35:21
【问题描述】:

在我的应用程序中,我使用 ORMLite 在我的 SQLite 数据库中插入数据。在某些设备上插入数据时出现以下错误:

02-05 09:29:56.864  22365-22441/com.app E/SQLiteLog﹕ (5) statement aborts at 2: [PRAGMA journal_mode=PERSIST]
02-05 09:29:56.864  22365-22441/com.app W/SQLiteConnection﹕ Could not change the database journal mode of '/data/data/com.app/databases/app.db' from 'wal' to 'PERSIST' because the database is locked.  This usually means that there are other open connections to the database which prevents the database from enabling or disabling write-ahead logging mode.  Proceeding without changing the journal mode.

我不知道如何为 ORMLite 解决这个问题。有人可以解决我的问题吗?只访问一个 SQLOpenHelper 并不能解决我的问题,因为我使用的是 ORMLite 并且不直接从我的代码中使用 SQLOpenHelper。

【问题讨论】:

  • Android Database Locked的可能重复
  • @AmitVaghela 他没有使用 ORMLite
  • 检查该解决方案它将解决您的问题@Bart Bergmans
  • @AmitVaghela 他的解决方案只使用了一个 SQLOpenHelper,我没有使用一个,因为我使用的是 ORMLite(这也是他的解决方案,使用 ORMLite)
  • 你有解决方案,很高兴知道@Bart Bergmans

标签: android sqlite ormlite


【解决方案1】:

我想我找到了解决办法。我从每个 DatabaseManager 中执行了以下代码:

SQLiteDatabase db = helper.getWritableDatabase();
Cursor cursor = db.rawQuery("PRAGMA journal_mode = WAL;", null);
cursor.close();

我收到的语句中止错误要少得多,但我仍然会收到一些错误。我应该在每次查询后运行该代码还是这不是一个好的解决方案?

【讨论】:

  • 如何在房间里添加这个? val db:支持 SQLite 数据库? = roomDb.openHelper.writableDatabase; val cursor: Cursor = db!!.query("PRAGMA journal_mode = WAL;", null); cursor.close() ???
【解决方案2】:

您是否在此语句之前使用查询,似乎该威胁的执行仍在执行?

也许您需要在开始另一个查询之前等待结果? 不知道是不是想和你一起思考。

【讨论】:

    【解决方案3】:

    正如错误所说,有一个传入操作。也许某种操作在一个设备上比另一个设备慢。检查您的代码并牢记这一点

    【讨论】:

    • 如何查看正在运行的操作?我等了一会儿才运行一个新的查询,我仍然得到错误。在其他设备上我没有这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多