我有一个包含四列的SQLite-Database
我的助手类代码
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
我该怎么办才能修好它?
答案 0 :(得分:1)
方法toString()返回对象Cursor的字符串表示形式。您必须使用Cursor类的方法getString(int column)。
这样的事情: med = medicalHelp.getMedicine(Value1).getString(0);
更多信息:https://developer.android.com/reference/android/database/Cursor.html
答案 1 :(得分:1)
请改用此方法:
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);
}
答案 2 :(得分:0)
即使游标只包含一个值,它仍然表现为可能有多列和多行的游标。所以你必须转到第一行(moveToFirst()
,这可能会失败),并从第一列读取值(getString(0)
)。
但是,对于这种简单的情况,有一个helper function可以让你避免不得不用光标捣乱:
public Cursor getMedicine(String symptom1) {
SQLiteDatabase db = helper.getReadableDatabase();
return DatabaseUtils.stringForQuery(db,
"SELECT medicine FROM diseases WHERE symptoms = ?;",
new String[]{ symptom1 });
}