3

我收到一个 SQLiteException 说数据库被锁定来自 web 视图。我实际上并没有在我的应用程序中使用任何 webviews,但我相信它与基于未回答的其他堆栈溢出问题的 admob 有关。

我在自己的东西中使用 SQLite,但这不应该是它的原因吗?我似乎也无法复制它,所以我不确定如何修复它。有任何想法吗?

android.database.sqlite.SQLiteException: error code 5: database is locked
at android.database.sqlite.SQLiteStatement.native_execute(Native Method)
at android.database.sqlite.SQLiteStatement.execute(SQLiteStatement.java:61)
at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1916)
at android.webkit.WebViewDatabase.flushCacheStat(WebViewDatabase.java:874)
at android.webkit.CacheManager.trimCacheIfNeeded(CacheManager.java:566)
at android.webkit.WebViewWorker.handleMessage(WebViewWorker.java:193)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:143)
at android.os.HandlerThread.run(HandlerThread.java:60)
4

4 回答 4

3

你使用多个进程吗?我的意思是你的活动是在不同的过程中开始的吗?如果是,则可能会导致问题,因为 webview 使用单例进行数据库管理。

于 2012-08-22T12:04:08.740 回答
1

摘要: 超过1个连接

说明: 您需要将数据库连接设为单例实例(共享实例)。我能想到的是;当您打开超过 2 个数据库连接时(即使是同一个 sqlite db),通常会出现这种类型的错误。因此,请确保您只有 1 个连接处于活动状态,最简单的方法是使您的数据库实例成为单例并在整个应用程序中共享,这样(共享)您将始终只有一个连接将您链接到数据库.

于 2012-08-21T08:56:19.897 回答
1

当多个线程同时更新数据库时会发生这种情况。您可以通过在代码中添加同步块来避免这种情况。

synchronized (this) {
        //update your database (one thread at time)
    }
于 2012-08-21T09:04:39.807 回答
1

尝试修改 StrictMode 以查看有关错误的更多信息。它可能与主线程上的 Internet 访问、并发问题、很多问题有关,因此请尝试发布您的清单以查看和建议您,因为此 stackTrace 没有提供太多信息。并记得修改 StrictMode 并发布消息。

;)

于 2012-08-20T22:26:01.253 回答