我正在尝试查询我的数据库中的字符串,然后将其称为“测试”,然后找出该特定字符串所在的行并保存该数字以供使用。我以为我之前已经想到这个问题,但现在因为某种原因它没有工作,我得到一个错误,说没有这样的专栏“测试”。
这是我的代码
public String getRow(String value){
ContactDB db = new ContactDB(this);
db.open();
Cursor curs = db.getId(value);
String test = curs.getString(curs.getColumnIndex(db.NAME));
curs.close();
Log.v("Contact", "Row ID: " + test);
db.close();
return test;
}
“测试”作为值
发送到该值这是在我的数据库中
//---retrieve contact id---
public Cursor getId(String where){
Cursor c = db.query(DATABASE_TABLE, new String[] {ID},where,null,null,null,null);
if (c != null)
c.moveToFirst();
return c;
}
我不记得从我第一次测试时改变了什么,所以我不知道为什么它现在不能工作
答案 0 :(得分:0)
我注意到有两个错误:
在查询中
Cursor c = db.query(DATABASE_TABLE,new String [] {ID},where,null,null,null,null);
仅选择ID列,而您尝试获取列NAME的详细信息
String test = curs.getString(curs.getColumnIndex(db.NAME));
在select子句中包含name列:类似
Cursor c = db.query(DATABASE_TABLE, new String[] {ID,NAME},where,null,null,null,null);
在where子句中,您需要编写条件字符串,不包括“where” 在你的情况下String包含值“Test”。因此,过滤条件应为
String whereClasue = NAME +“='”+ where +“'”;
查询应该是这样的:
public Cursor getId(String where){
Cursor c = db.query(DATABASE_TABLE, new String[] {ID,PHONE_NUMBER,NAME},NAME + " = '" + where + "'",null,null,null,null);
if (c != null)
c.moveToFirst();
return c;
}