0

大家好,我正在使用 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

4 回答 4

2

1 - 应该检查光标中是否有任何数据......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-不确定,但在选择查询中查找,因为<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});
于 2012-06-24T12:00:37.100 回答
0

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

Cursor c = db.query(TABLE_NAME, null, "name= \'" + name + "\'", null, null, null, null);
于 2012-06-24T12:46:26.280 回答
0

问题似乎在这里

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

以下应该工作

Cursor cursor= db.query(TABLE_IMAGES,null, "name" +" = ?", new String[]{name},  null, null, null);
于 2012-06-24T12:12:33.217 回答
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;
}
于 2012-06-24T13:21:29.727 回答