Java 如何预防;sqlite\u配置失败错误\u代码=21。这种情况永远不会发生。”;错误

Java 如何预防;sqlite\u配置失败错误\u代码=21。这种情况永远不会发生。”;错误,java,android,sql,database,sqlite,Java,Android,Sql,Database,Sqlite,这个毫无帮助的错误信息最近让我发疯;它不会出现在android emulator中,仅当通过USB调试在我的(android 2.3.6)设备上运行时才会出现,该设备是从Eclipse启动的 实际上没有抛出异常,据我所知,我的数据库查询没有一个真正失败(一切似乎都正常工作),但我运行的每个查询都至少收到一个这样的错误 就我所知,我做的一切都是对的: 我正在使用一个创建为单例的SQLiteOpenHelper实例(同步静态方法使用应用程序的上下文检索单个实例) 我只在需要运行update、ins

这个毫无帮助的错误信息最近让我发疯;它不会出现在android emulator中,仅当通过USB调试在我的(android 2.3.6)设备上运行时才会出现,该设备是从Eclipse启动的

实际上没有抛出异常,据我所知,我的数据库查询没有一个真正失败(一切似乎都正常工作),但我运行的每个查询都至少收到一个这样的错误

就我所知,我做的一切都是对的:

  • 我正在使用一个创建为单例的
    SQLiteOpenHelper
    实例(同步静态方法使用应用程序的上下文检索单个实例)
  • 我只在需要运行
    update
    insert
    等时调用
    getWritableDatabase()
    ,其余时间我使用
    getReadableDatabase()
  • 所有涉及可写数据库的操作也都用
    try/catch/finally
    块包装在事务中,以确保调用
    endTransaction()
  • 所有其他查询都封装在一个
    try/catch
    块中,以捕获任何可能的
    SQLException
    响应,并根据需要记录这些响应
  • 我正在对我正在使用的所有
    SQLiteDatabase
    Cursor
    对象调用
    close()
在我纠正这些错误之前,这些都是用来在emulator中抛出背景错误的,当我在emulator中运行我的应用程序时,我再也看不到任何类型的数据库错误。然而,在我的设备上运行时,我发现似乎每运行一个查询都会出现“这永远不会发生”的错误,没有明显的不良影响

当然,我只是暂时忽略这些,但我想不出任何其他可能的原因。我的SQL语句都是有效的,我的大部分代码都是基于官方的android教程,比如


有人能确定我为什么会出现这些错误吗?还有其他可能的原因吗?

根据

这个答案可能会帮助你解决问题


检查

我记得当您尝试访问已关闭的sqlite db时会发生此错误。当多个线程同时访问db,其中一个线程称为关闭时,可能会发生此错误。我只是通过根本不关闭sqlite数据库解决了这个问题。希望这有帮助

不过就是这样;我找不到我做错了什么。我的
SQLiteOpenHelper
是一个单线程,因此我知道多线程应该不会是问题,即使如此,我只有两个基本类,一个
PreferenceActivity
和一个
BroadcastReceiver
,只有后者执行过写操作,另一个只执行基于
SELECT
的操作。