如果cursor为空/ null

时间:2013-04-05 15:40:23

标签: android sqlite cursor

如果cursor为空/ null,我想添加一行。

但我使用的代码不起作用:(错误:索引-1请求大小为1)

               final String query = "SELECT  category.CategoryID, " +
                        "category.Title, category.ParentID " +
                        " FROM category" +
                        " WHERE category.Title = '"+ _TopCategory  
                        +"'";

                Cursor cursorKayita = db.rawQuery(query, null);

                if ( cursorKayita.moveToFirst() ) {
                    // start activity 
                } else {
                _Categories.put("Title", _TopCategory);
                 db.insert("category", null, _Categories);  

                }

2 个答案:

答案 0 :(得分:0)

  

索引-1请求大小为1

这是一个CursorIndexOutOfBoundsException。只有see this error尝试从Cursor中读取数据而不调用moveToFirst()(或类似的moveTo___()方法)时才会"edit"。但是你发布的代码中没有任何地方你试图从Cursor中读取...

好消息是,LogCat错误会为您提供发生此错误的行号,如果您在阅读LogCat时需要帮助,请点击问题下的{{3}}进行发布。

答案 1 :(得分:0)

您应该向光标添加一行提出问题

try{
   Lite = open_bd(); //Open database
   Cursor x = Lite.query(/*Your query*/);

   if (x.getCount() != 0 && x != null) {
      x.moveToFirst();
      //Do your activity
   }else{
      _Categories.put("Title", _TopCategory);
      db.insert("category", null, _Categories);  
   }
}catch (Exception error) {
   //Whatever with your error
} finally {
   Lite.close();
}

这就是我管理游标的方法,因为我发现当你询问游标是否为空时它们非常不稳定。它们可以为空但不总是为空

:D希望有所帮助


当您管理游标和数据库时,长度总是像

那样
where (cursor.getCount() < Xnumber){
   //code
}

与if相同,你应该使用“less-than”而不是“less-or-equal-than”,因为游标和数据库从-1索引开始读取。

看看这个:

for (int i = 0; i < x.getCount(); i++) {
   if (x.getInt(1) == 0) {
      //CODE
   }
   x.moveToNext();
}