天天看点

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

这是一个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();
    }
  }      

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

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