我正在开发一个应用程序,下载一些文件,并将其文本保存在文件内容字段中的数据库中。文件大小可以从一些KB到10 MB不等。该应用程序在保存时适用于所有尺寸。在长文件内容记录上使用select语句时出现问题。它给
java.lang.非法状态异常:无法从CursorWindow读取行0, col0
获取这样的行时。字段内容大小是否有限制?如果是这样,那么为什么它让我们在检索时保存并给出错误呢?这是我截取行的代码:
public String getFileContent(MyFile gc) {
if(!isDBOpen()) {
open();
}
try {
String mQuery = "SELECT * FROM " + DBOpenHelper.TABLE_SAVED_FILES + " WHERE " + DBOpenHelper.COLUMN_ID + " = " + gc.id;
Cursor mCursor = database.rawQuery(mQuery, null);
if(mCursor.getCount() <= 0) {
return null;
}
if(mCursor.moveToFirst()) {
return getCursorRowContent(mCursor);
}
} catch (Exception e) {
e.getMessage();
}
return null;
}
private String getCursorRowContent(Cursor mCursor) throws Exception {
return mCursor.getString(mCursor.getColumnIndex(DBOpenHelper.COLUMN_FILE_CONTENT));
}
知道发生了什么吗?我已经在2到3台设备上进行了测试。
Logcat输出:
01-29 13:41:56.520: W/CursorWindow(4121): Window is full: requested allocation 5140987 bytes, free space 2096617 bytes, window size 2097152 bytes
01-29 13:41:56.520: E/CursorWindow(4121): Failed to read row 0, column 0 from a CursorWindow which has 0 rows, 9 columns.
01-29 13:43:30.932: W/System.err(4121): java.lang.IllegalStateException: Couldn't read row 0, col 0 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
01-29 13:43:30.932: W/System.err(4121): at android.database.CursorWindow.nativeGetLong(Native Method)
01-29 13:43:30.932: W/System.err(4121): at android.database.CursorWindow.getLong(CursorWindow.java:507)
01-29 13:43:30.932: W/System.err(4121): at android.database.AbstractWindowedCursor.getLong(AbstractWindowedCursor.java:75)
01-29 13:43:30.936: W/System.err(4121): at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:220)
01-29 13:43:30.936: W/System.err(4121): at android.database.AbstractCursor.moveToNext(AbstractCursor.java:245)
01-29 13:43:30.940: W/System.err(4121): at com.nxb.cachehead.bl.PocketQueryDataSource.getGeoCacheContent(PocketQueryDataSource.java:97) 01-29 13:43:30.940: W/System.err(4121): at com.nxb.cachehead.bl.GPXFileCopyAsyncTask.doInBackground(GPXFileCopyAsyncTask.java:27)
01-29 13:43:30.940: W/System.err(4121): at com.nxb.cachehead.bl.GPXFileCopyAsyncTask.doInBackground(GPXFileCopyAsyncTask.java:1)
01-29 13:43:30.940: W/System.err(4121): at android.os.AsyncTask$2.call(AsyncTask.java:287)
01-29 13:43:30.944: W/System.err(4121): at java.util.concurrent.FutureTask.run(FutureTask.java:234)
01-29 13:43:30.944: W/System.err(4121): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
01-29 13:43:30.948: W/System.err(4121): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
01-29 13:43:30.948: W/System.err(4121): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
01-29 13:43:30.948: W/System.err(4121): at java.lang.Thread.run(Thread.java:856)
如果要将图像保存为字节,另一种方法是,在压缩位图时,将质量设置为0。
01-29 13:41:56.520:W/CursorWindow(4121):窗口已满:请求的分配5140987字节,可用空间2096617字节,窗口大小2097152字节
Android SQLite在游标窗口中返回最大大小为2MB的行,如config\u cursorWindowSize
所指定。如果您的行超过此限制,则会出现此错误。
无论如何,在sqlite数据库中存储大数据不是一个好主意。将文件存储在文件系统中,并将路径存储在数据库中。
问题内容: 使用数据库时出现问题。当我运行SQLView.java时,出现一个致命异常: 希望有人可以帮助我。我将发布所有与数据库相关的代码。当您需要更多信息时,请告诉我,不要犹豫,索取更多信息! 我认为我的专栏有问题,无法找出原因。 另外,我已经阅读了该网站上的所有相关问题,但是我找不到应该在何处声明我的列以及要添加/更改的内容。有人知道怎么做吗?:) 首先:我的数据库类: SQLite类,用于
问题内容: 我正在创建一个使用SQLiteDatabase来存储项目的应用程序。但是,从数据库中填充数据时出现错误,应用崩溃。 这是我的数据库- Note.java- NotesDatabase.java- 这是LogCat错误日志- 请帮助我找出我的代码出了什么问题。提前致谢!! 问题答案: 您的主题行具有误导性。您的堆栈跟踪中的异常说 这实际上意味着无法在中找到指定的列,并且-1作为列索引返回
我尝试使用上下文菜单从listview中删除数据,得到了java.lang.IllegalStateException:Could not read row 0,col 2 from CursorWindow。在从游标访问数据之前,请确保游标已正确初始化。 第一行错误AssignmentRecord.SetAssid(Cursor.GetString(2)); 第二个错误是List records
我有一个问题做npm启动,这似乎是一个bug与css-loader但我不能修复它。 我读过这篇文章,但我不能让它工作:https://github.com/reactjsresources/react-webpack-babel/issues/197 我还修改了webpack.config.js,添加了: 和: 如果有人能帮忙请... 谢谢.
我有以下前缀: 有办法 在intellij中,idea工作正常,但启动jar时出现错误: JAVA尼奥。文件NoSuchFileException:文件:/app。罐子/BOOT-INF/classes/模板/请求订单/未标记/请求订单未标记。pdf