大家都在使用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
好像它不存在,但我检查了名称字符串是否正确,当我在列表视图中显示名称时,我看到该名称,所以它存在。
有人可以帮我解决这个问题吗?
答案 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;
}