java.lang.IllegalStateException: Process 20535 exceeded cursor quota 100, will kill it

标签: 测试android调试数据库游标
3132人阅读 评论(0) 收藏 举报
分类:

这是一个SQLiteAndroid嵌入的数据库测试程序。

在添加的时候,每次启动程序都会自己再次插入一遍(不能做到数据库有的信息不插入,id是自动生成的)

上网找了一下方法说是添加什么触发器(话说SQL的触发器还可以,android的,额,这就不用说了)。

那只好插入的时候再次查找一遍,判断是否是第一次插入。

好了这个时候就出现问题了。

代码如下:

/**
	 * 保存数据
	 * flag判断数据是否以前插入过
	 * @param appInfos
	 */
	public void save(ArrayList<Country> appInfos) {
		drop();
		Cursor cursor1 = null;
		boolean flag = false;
		try {
			db = this.open();
			
			if (appInfos == null) {
				return;
			}
			for (Country appInfo : appInfos) {
				flag = false;
				cursor1 = db.rawQuery("select * from " + DBHelper.SORT_DB
						+ " where name='" + appInfo.name + "'", null);
				if (cursor1 != null && cursor1.moveToFirst()){
					flag = true;
				}
				if(!flag){
					db.execSQL("insert into " + DBHelper.SORT_DB
							+ "(name,target) values(?,?)", new Object[] {
							appInfo.name, appInfo.target });
				}
				cursor1.close();
			}
		} finally {
			
			if (db != null)
				db.close();
		}
	}

开始的时候判断是放在外边(另外一个函数),在网上找说是使用游标时一定要关闭。

好吧以为打开了再次调用函数会出现冲突,那就放在里面。

但是还是有这个错误,最后找到for循环里面每次都会给Cursor复制,所以在下次使用前一定关闭。

不知道说的对不对,但是这样做结果出来了。

有大神路过的求指教。

0
0

猜你在找
【直播】机器学习&深度学习系统实战(唐宇迪)
【直播】Kaggle 神器:XGBoost 从基础到实战(冒教授)
【直播回放】深度学习基础与TensorFlow实践(王琛)
【直播】计算机视觉原理及实战(屈教授)
【直播】机器学习之凸优化(马博士)
【直播】机器学习之矩阵(黄博士)
【直播】机器学习之概率与统计推断(冒教授)
【直播】机器学习之数学基础
【直播】TensorFlow实战进阶(智亮)
【直播】深度学习30天系统实训(唐宇迪)
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:174766次
    • 积分:2683
    • 等级:
    • 排名:第13331名
    • 原创:316篇
    • 转载:17篇
    • 译文:11篇
    • 评论:21条
    博客专栏
    最新评论