将游标值检索为字符串时出错

时间:2016-05-28 18:54:41

标签: android sqlite cursor android-database

我有一个包含四列的SQLite-Database

  1. ID
  2. 名称
  3. 症状
  4. 医学
  5. 我的助手类代码

            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 个答案:

答案 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 });
    }