获取数据时,Android sqlite帮助程序错误

时间:2012-06-24 11:55:27

标签: java android sqlite

大家都在使用sqlite帮助程序类,但是使用select语句时遇到了一些问题。 我希望按名称获取数据库项的id。

我使用这种选择方法:

public Cursor selectShift (String name){
    SQLiteDatabase db = dbHandler.getReadableDatabase();
    Cursor c = db.query(TABLE_NAME, null, "name=" + name, null, null, null, null);
    c.moveToFirst();
    db.close();
    return c;
}

当我打电话给我时,我用这个:

if(handler.selectShift(name)!=null){
      Cursor c = handler.selectShift(name);
      id = c.getInt(c.getColumnIndex("_id"));
      c.close();      
  }

然后得到这个错误:

  

android.database.CursorIndexOutOfBoundsException:请求索引0,   大小为0

好像它不存在,但我检查了名称字符串是否正确,当我在列表视图中显示名称时,我看到该名称,所以它存在。

有人可以帮我解决这个问题吗?

4 个答案:

答案 0 :(得分:2)

1 - 有shoudld检查光标中是否有任何数据...... c.getCount> 0或c.moveToFirst()或c.isAfterLast().......

if(handler.selectShift(name)!=null){
      Cursor c = handler.selectShift(name);

if (c.moveToFirst()){ //<--------------
   do{  //<---------if you not need the loop you can remove that
       id = c.getInt(c.getColumnIndex("_id"));
   }while(cursor.moveToNext());
}



  c.close();      

}

2-不确定,但查看select查询,因为'<variable>'不在where变量的子句中

"SELECT COUNT(*) FROM " + tableName + " WHERE " + commentFieldName + " = '" + comment + "'"; 

better to use parametrized statement

String query = "SELECT COUNT(*) FROM " + tableName + " WHERE columnName = ?";
cursor = db.rawQuery(query, new Sring[] {comment});

答案 1 :(得分:0)

问题似乎在这里

"name="  <-It should be "name = "+name

以下应该工作

Cursor cursor= db.query(TABLE_IMAGES,null, "name" +" = ?", new String[]{name},  null, null, null);

答案 2 :(得分:0)

除非您的名称变量已经为sql格式化(或不是TEXT),否则我猜你需要一点报价。也许是这样的

Cursor c = db.query(TABLE_NAME, null, "name= \'" + name + "\'", null, null, null, null);

答案 3 :(得分:0)

感谢您的帮助,我发现了问题。它是在游标方法中,解决方案是:

public Cursor selectShift (String name){
    SQLiteDatabase db = dbHandler.getReadableDatabase();
    Cursor c = db.query(TABLE_NAME, new String[] {"_id"}, "name LIKE '"+name+"%'", null, null, null, null);
    c.moveToFirst();
    db.close();
    return c;
}