Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.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
Java 在android上将大数据导入sqlite数据库_Java_Android_Sqlite - Fatal编程技术网

Java 在android上将大数据导入sqlite数据库

Java 在android上将大数据导入sqlite数据库,java,android,sqlite,Java,Android,Sqlite,当我想读取以前保存到数据库中的大型图像(大约10MB)时,我遇到以下错误: 窗口已满:请求分配10052488字节,可用空间 2096638字节,窗口大小2097152字节 java.lang.IllegalStateException:无法从中读取第0行、第0列 游标窗口 但是,在保存图像时,不会发生错误。我使用以下代码行获取值: value=cursor.getString(fieldIndex) 阅读让我相信,除了不将图像保存到数据库之外,没有其他解决方案。然而,我的日程安排很紧,修改这部

当我想读取以前保存到数据库中的大型图像(大约10MB)时,我遇到以下错误:

窗口已满:请求分配10052488字节,可用空间 2096638字节,窗口大小2097152字节

java.lang.IllegalStateException:无法从中读取第0行、第0列 游标窗口

但是,在保存图像时,不会发生错误。我使用以下代码行获取值:

value=cursor.getString(fieldIndex)

阅读让我相信,除了不将图像保存到数据库之外,没有其他解决方案。然而,我的日程安排很紧,修改这部分代码将花费我相当长的时间,因此,如果有任何方法可以让它工作,我将非常感谢任何提示/破解/解决方法


同一行代码对于较小的图像非常有效(我只是用6MB的图像进行了尝试,没有任何问题),因此我非常确定我的Java代码中没有错误。图像的保存过程也没有任何问题。

使用光标后,请像
cursor.close()一样关闭它

它适合我。

我的应用程序必须将图像保存在SQlite DB中

为了从DB中读取大图像,我开发了以下代码

int lengthCount = 2000000;

Cursor res = db.rawQuery("SELECT * FROM attributes WHERE length(image) < " + lengthCount + " and fk_feature = '" + idFeatures + "' AND cancel = 0 ORDER BY last_sync DESC", null);

        res.moveToFirst();
        while (!res.isAfterLast()) {
            //...
            // if length (image) <lengthCount no read errors occur
            //...
            res.moveToNext();
        }
        res.close();

Cursor r = db.rawQuery("SELECT id, length(image) FROM nameTable WHERE length(image) > " + lengthCount, null);
        r.moveToFirst();
        int startCount = 0;

        while (!r.isAfterLast()) {
            MyClassImage item = new MyClassImage();
            item.id = r.getString(r.getColumnIndex("id"));
            int lengthImage = r.getInt(r.getColumnIndex("length(image)"));
            while (lengthImage > startCount) {
                Cursor r1;
                if (lengthImage > (startCount + lengthCount)) {
                    r1 = db.rawQuery("SELECT substr(image, " + startCount + ", " + lengthCount + ") as x FROM attributes WHERE id ='" + item.id + "'", null);
                } else {
                    r1 = db.rawQuery("SELECT substr(image, " + startCount + ", " + (lengthImage - startCount) + ") as x FROM attributes WHERE id ='" + item.id + "'", null);
                }
                r1.moveToFirst();
                if (!r1.isAfterLast()) {
                    if (item.image != null && item.image.length > 0) {
                        item.image = ByteBuffer.allocate(item.image.length + r1.getBlob(r1.getColumnIndex("x")).length).put(item.image).put(r1.getBlob(r1.getColumnIndex("x"))).array();
                    } else {
                        item.image = r1.getBlob(r1.getColumnIndex("x"));
                    }
                }
                r1.close();
                startCount += lengthCount;
            }
int lengthCount=2000000;
Cursor res=db.rawQuery(“从属性中选择*,其中长度(图像)<”+lengthCount+“和fk_特征=”“+idFeatures+”,取消=0顺序,按上次同步描述”,null);
res.moveToFirst();
而(!res.isAfterLast()){
//...
//如果长度(图像)开始计数){
光标r1;
如果(长度图像>(开始计数+长度计数)){
r1=db.rawQuery(“选择substr(图像,“+startCount+”,“+lengthCount+”)作为id=“+item.id+”,null”的属性中的x);
}否则{
r1=db.rawQuery(“选择substr(图像,“+startCount+”,“+(lengthImage-startCount)+”)作为id='“+item.id+”,null的属性中的x);
}
r1.moveToFirst();
如果(!r1.isAfterLast()){
如果(item.image!=null&&item.image.length>0){
item.image=ByteBuffer.allocate(item.image.length+r1.getBlob(r1.getColumnIndex(“x”)).length).put(item.image).put(r1.getBlob(r1.getColumnIndex(“x”)).array();
}否则{
item.image=r1.getBlob(r1.getColumnIndex(“x”);
}
}
r1.close();
startCount+=长度计数;
}

注意:我希望找到一个更优化的解决方案,但目前这是正确的。

尝试将文件保存在SD卡中,并将图像的路径保存到db。为什么不保存为BLOB?@SilvansSolanki这正是我想要避免的,因为日程安排很紧,但这可能是一个与设备相关的问题,上面的错误意味着光标已到达他的限制,不同设备的限制不同。一个可能的解决方案可能是将字符串分成块并保存,然后将其放在一起……好的,谢谢。如果我有消息,我会写下回复。