Webview SQLiteException:数据库已被锁定

时间:2012-08-13 18:16:45

标签: android sqlite

我收到一条SQLiteException,表示数据库已锁定来自webview。我实际上并没有在我的应用程序中使用任何webview,但我认为它与基于this other stack overflow question的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 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

摘要: 多个连接

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

答案 3 :(得分:1)

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

synchronized (this) {
        //update your database (one thread at time)
    }