Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 可能导致SQLiteDiskIOException的原因:磁盘I/O错误(代码522)_Android_Sqlite_Android Sqlite - Fatal编程技术网

Android 可能导致SQLiteDiskIOException的原因:磁盘I/O错误(代码522)

Android 可能导致SQLiteDiskIOException的原因:磁盘I/O错误(代码522),android,sqlite,android-sqlite,Android,Sqlite,Android Sqlite,应用程序可能有多个线程正在访问sqlite数据库。在一个函数中,它执行一个简单的查询: ContentResolver resolver = context.getContentResolver(); final Cursor cursor = resolver.query(Data.CONTENT_URI, Data.PROJECTION, Data.Id + "=?", new String[] { id + "" }, null); 应用程序大部分时间都在工作,

应用程序可能有多个线程正在访问sqlite数据库。在一个函数中,它执行一个简单的查询:

ContentResolver resolver = context.getContentResolver();

final Cursor cursor = resolver.query(Data.CONTENT_URI, Data.PROJECTION,
            Data.Id + "=?", new String[] { id + "" }, null);
应用程序大部分时间都在工作,但在此resolver.query行上看到报告的崩溃

SQLiteDiskIOException: disk I/O error (code 522)
#################################################################
Error Code : 522 (SQLITE_IOERR_SHORT_READ)
Caused By : Disk I/O error occurred during 'short read' operation.
(disk I/O error (code 522))
看见

(522)SQLITE\u IOERR\u SHORT\u READ

SQLITE_IOERR_SHORT_读取错误代码是SQLITE_IOERR的扩展错误代码,表示VFS层中的读取尝试无法获得请求的字节数。这可能是由于文件被截断

不知道怎么读。 522错误的原因可能是什么。如果这是由于其他线程正在访问数据库引起的,如何确保该解析器.query()不会被其他线程中断(对于其他线程的数据库查询也是如此)

数据库是

mOpenHelper = new SQLiteOpenHelper(context, name, null, version);
以及查询/更新/。。。就像

@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {

    // simplified snippet    
    final SQLiteDatabase db = mOpenHelper.getReadableDatabase();

    Cursor cursor = db.rawQuery(selection, selectionArgs);

    return cursor;
}

@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {

    // simplified snippet  

    final SQLiteDatabase db = mOpenHelper.getWritableDatabase();

    String sql = selection;
    SQLiteStatement updateStatement = db.compileStatement(sql);
    int numberOfRowsUpdated = updateStatement.executeUpdateDelete();
    return numberOfRowsUpdated;

}

数据库文件已损坏。用最新的备份替换它。谢谢!重新启动应用程序,它工作正常。不确定是否数据库文件已损坏。不知道如何替换Android上备份的数据库文件,有什么建议吗?