天天看點

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();
    }
  }      

開始的時候判斷是放在外邊(另外一個函數),在網上找說是使用遊标時一定要關閉。

好吧以為打開了再次調用函數會出現沖突,那就放在裡面。