Ошибка получения значения курсора в виде строки
У меня есть база данных SQLite с четырьмя столбцами
- Я БЫ
- название
- симптомы
- Лекарственное средство
Код моего помощника
public Cursor getMedicine(String symptom1)
{
SQLiteDatabase db=helper.getReadableDatabase();
Cursor c = db.rawQuery("SELECT medicine FROM diseases WHERE symptoms = ?;",new String[] {symptom1});
c.moveToFirst();
return c;
}
А вот код моего класса активности:
String med = "";
Disp_med_DBHelper medicalHelp = new Disp_med_DBHelper(this);
medicalHelp.open();
medicalHelp.getMedicine(Value1);
med = medicalHelp.getMedicine(Value1).toString();
t1.setText(med);
medicalHelp.close();
Где t1 - это мое текстовое поле, а Value1 - строка, которую нам нужно отправить помощнику базы данных для запроса к базе данных.
Когда я проверяю вывод в моем текстовом поле, я получаю следующий вывод
android.database.sqlire.SQLiteCursor@4174986
Что я должен сделать, чтобы это исправить?
3 ответа
Метод toString () возвращает строковое представление объекта Cursor. Вы должны использовать метод getString (int column) из класса Cursor.
Примерно так: med = medicalHelp.getMedicine(Value1).getString(0);
Дополнительная информация: https://developer.android.com/reference/android/database/Cursor.html
Используйте этот метод вместо:
public String getMedicine(String symptom1) {
SQLiteDatabase db = helper.getWritableDatabase();
Cursor c = db.rawQuery("SELECT medicine FROM diseases WHERE symptoms = ?;", new String[]{symptom1});
if (c.moveToFirst()) {
return c.getString(c.getColumnIndex("medicine"));
}
return null;
}
а затем в вашей деятельности:
med = medicalHelp.getMedicine(Value1)
if(med!=null){
t1.setText(med);
}
Даже если курсор содержит только одно значение, он все еще ведет себя как курсор, который может иметь несколько столбцов и несколько строк. Таким образом, вы должны пойти в первый ряд (с moveToFirst()
, что может привести к сбою), и прочитайте значение из первого столбца (с getString(0)
).
Тем не менее, для этой простой ситуации есть вспомогательная функция, которая позволяет избежать необходимости возиться с курсором:
public Cursor getMedicine(String symptom1) {
SQLiteDatabase db = helper.getReadableDatabase();
return DatabaseUtils.stringForQuery(db,
"SELECT medicine FROM diseases WHERE symptoms = ?;",
new String[]{ symptom1 });
}