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 无法从包含0行1列的游标窗口中读取第0行第0列_Android_Sqlite - Fatal编程技术网

Android 无法从包含0行1列的游标窗口中读取第0行第0列

Android 无法从包含0行1列的游标窗口中读取第0行第0列,android,sqlite,Android,Sqlite,我有一个android应用程序,它试图从SQLite数据库中加载一个blob作为字节数组: public byte[] getBytesForId(long id){ byte[] result = null; String sql = "SELECT _blob FROM test_table WHERE _id=?"; String[] selection = new String[] { String.valueOf(id) }; Cursor mCur

我有一个android应用程序,它试图从SQLite数据库中加载一个blob作为字节数组:

public byte[] getBytesForId(long id){
    byte[] result = null;
    String sql =  "SELECT _blob FROM test_table WHERE _id=?";
    String[] selection = new String[] { String.valueOf(id) };

    Cursor mCursor = super.DB().rawQuery(sql, selection);

    if ( mCursor != null && mCursor.moveToFirst() ) {               
        if (mCursor.getCount() > 0)
            result = mCursor.getBlob(0);

        if (mCursor != null && !mCursor.isClosed())
            mCursor.close();
    }

    return result;
}
但我有以下例外:

Failed to read row 0, column 0 from a CursorWindow which has 0 rows, 1 columns.
java.lang.IllegalStateException: Couldn't read row 0, col 0 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
at android.database.CursorWindow.nativeGetBlob(Native Method)
at android.database.CursorWindow.getBlob(CursorWindow.java:404)
at android.database.AbstractWindowedCursor.getBlob(AbstractWindowedCursor.java:45)
at com.test.testapp.model.DbClass.getBytesForId(DbClass.java:218)
at com.test.testapp.TestService.StepThroughBlocks(TestService.java:434)
at com.test.testapp.TestService.checkBlocks(TestService.java:378)
at com.test.testapp.TestService.access$4(TestService.java:357)
at com.test.testapp.TestService$2.run(TestService.java:315)
at java.lang.Thread.run(Thread.java:841)
当然,如果我先检查光标是否有一些数据

if ( mCursor != null && mCursor.moveToFirst() ) 
        if (mCursor.getCount() > 0)
            result = mCursor.getBlob(0);

…我不应该得到这个例外?我添加了mCursor.getCount行,希望这可能会有所帮助,但我仍然得到了例外。这怎么可能

您的数据有多大?Android sqlite添加了一个
CursorWindow
,它为行数据提供了有限的空间,如果数据不适合窗口,您可能会出现此异常。这是一个相当大的数据量(每行1-2Mb),因此我猜这可能是问题所在。一个更有用的例外会让我更快地走上正轨。有没有什么方法可以让数据顺利插入而没有任何错误?!
CursorWindow
的默认大小是2MB,因此您的blob很可能不适合那里。考虑将二进制数据存储在数据库之外。