我想根据用户条件显示本地数据库表中的数据。
要显示的代码:
public void viewContact(){
String name = getIntent().getStringExtra("name").toString();
tvName.setText(name);
String phone = db.getContacts(name).toString();
tvPhone.setText(phone);
String web = db.getContacts(name.toString();
tvWeb.setText(web);
}
DBHelper.class:
public Cursor getContacts(String therapist_name){
String selectQuery = " SELECT therapist_phone, therapist_web " +
" FROM " + THERAPIST_TABLE + " WHERE " + THERA_NAME + " = " + "'" + therapist_name + "'";
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
return cursor;
}
谁能指出我哪里出了问题?
说明: 该活动从先前的活动中接收联系人姓名(因此为getIntent())。然后,它希望从数据库中查看与该联系人有关的数据,从而希望查看phone_number和website列。
因此,如果Therapist_name与上一个活动中所选联系人的姓名相同,则它将仅在下一个活动中显示该联系人的therapist_number和therapist_website。
答案 0 :(得分:0)
您只是返回游标对象。读取数据,然后返回检索到的数据。
示例:
Cursor cursor = db.rawQuery(selectQuery, null);
if (cursor != null) {
if (cursor.moveToFirst()) {
do {
//Save data in variables here
ph_no = cursor.getString(0); // therapist contact
web = cursor.getString(1); //therapist web
} while (cursor.moveToNext());
}
}
//pass an array of ph_no and web from here now
答案 1 :(得分:0)
您应该具有一个具有所需属性的对象联系人,并且每次运行查询时,请通过步骤Ana said,检查光标是否为null并移至第一个(我亲自检查了光标,如果为空则记录错误。
然后返回创建的对象,因此,在调用该方法时,您将拥有所有内容,就像这样:
public List<Contact> getContacts(String therapist_name){
List<Contact> listOfContacts = new ArrayList<>();
String selectQuery = " SELECT therapist_phone, therapist_web " +
" FROM " + THERAPIST_TABLE + " WHERE " + THERA_NAME + " = " + "'" + therapist_name + "'";
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
if (cursor != null) {
if (cursor.moveToFirst()) {
do {
//Save data in variables here
String ph_no = cursor.getString(0); // therapist contact
String web = cursor.getString(1); //therapist web
listOfContacts.add(new Contact(ph_no, web));
} while (cursor.moveToNext());
}
}
return listOfContacts;
}
这将返回对象列表,以防万一有多个匹配项。您可以对其进行调整以获得一个或第一个匹配项,然后仅返回Contact对象,这样就可以得到数据,