无法从使用count()的sqlite查询中检索结果

时间:2018-06-11 17:57:27

标签: android sqlite android-sqlite

public Cursor legsWorkout(){
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor res = db.rawQuery("select count(*) from " + TABLE_W + " where w1="+ "Legs" + " or w2="
            + "Legs" + " or w3=" + "Legs",null);

    return res;
}

///other part


 Cursor res = myDB.bicepsWorkout();

            while (res.moveToFirst()){

                int totalCount = res.getInt(0);

                txtTest.setText(String.valueOf(totalCount));
            }

现在的问题是我无法检索数据,因为res.getString/int需要列名/索引,技术上在执行此查询时没有列只有结果。

所以我收到此错误:android.database.sqlite.SQLiteException: no such column: Biceps (code 1)

2 个答案:

答案 0 :(得分:2)

Cursor公开SQLiteDatabase上查询的结果。 您不需要列名来获取结果,您可以使用索引来获取查询结果。您可以使用案例中的第一个索引来获取计数。

   totalCount = res.getInt(0); //this will return the count value

答案 1 :(得分:0)

您不会将字符串/文本搜索参数括在单引号中,因此它们被视为列名。

即。您实际上是在说 从表中选择w1列等于Legs列的行数,或者w2列等于Legs列或w3列等于Legs列 。但是,没有Legs专栏。

而是尝试: -

Cursor res = db.rawQuery("select count(*) from " + TABLE_W + " where w1='"+ "Legs'" + " or w2="
        + "'Legs'" + " or w3=" + "'Legs'",null);

在这种情况下,您实际上是在说 选择表中的行数,其中w1列等于字符串Legs或w2列等于字符串Legs或w3列等于字符串Legs

不使用while(res.moveToFirst) { ..... }而不是循环,因为只返回一行,使用if (res.moveToFirst) { .... };更合适。