SQLite for Android - 尝试从不同的行查询字符串值

时间:2014-11-08 22:12:07

标签: android sqlite android-sqlite

我有下一张桌子 - 让我们称之为 - TABLE_ITEMS

  id |  tilte    |  body
________________________
  0     apple       red
  1     orange      orange
  2     grapes      green
  3     apple       green
  4     apple       red

现在我尝试使用两个不同的查询 -

在第一个中我想获得“body”下所有绿色的行 - 所以为了做到这一点,我使用了下一个代码:

public Cursor queryByBody(String color){

    SQLiteDatabase db = dbOpen.getReadableDatabase();

    Cursor c = db.query(Constants.TABLE_NAME_ITMES, null,
            Constants.ITEM_BODY + "='" + color+ "'", null, null, null, null);

    int x =c.getCount(); 
    Log.d("GOT INTO DB", "COUNT IS "+ x);
    return c;

}

正如你所看到的那样是变量x - 当我看到logcat时它会显示0。

我要做的另一件事是通过查看“标题”和“正文”来获取行

为了做到这一点,我使用了下一个代码:

public Cursor queryByCatAndBodyType(String title, String body){

    SQLiteDatabase db = dbOpen.getReadableDatabase();

    Cursor c = db.query(Constants.TABLE_ITMES, null,
        Constants.ITEM_TITLE + "='" + title + "' AND " + Constants.ITEM_BODY + "='"+ body +"'", null, null, null, null);

    int x =c.getCount(); 
    Log.d("GOT INTO DB", "COUNT IS "+ x);
    return c;

}

但是计数再次为0,我没有得到任何结果。

另一方面,我尝试了下一个代码 -

    public Cursor queryById(int id){

      SQLiteDatabase db = dbOpen.getReadableDatabase();

    Cursor c = db.query(Constants.TABLE_ITMES, null,
            Constants.ITEM_ID + " = " + id, null, null, null, null);
    int x =c.getCount(); 
    Log.d("GOT INTO DB", " count "+x );
    return c;
}

这次我得到了一个结果。

那么前两个问题我做错了什么? 我错过了什么吗?

感谢您提供任何帮助

1 个答案:

答案 0 :(得分:0)

原因是Android SQLite库以这种方式构建查询的方式。
尝试将第一次调用更改为query(),这样就可以了(如果没有其他问题):

Cursor c = db.query(Constants.TABLE_NAME_ITMES, null,
            Constants.ITEM_BODY + "=?", new String[]{color}, null, null, null);


修改
如果您仍有问题 - 尝试逐步移动
1)当你得到结果时记录目标栏的价值,这样可能会回答你的问题:

public Cursor queryById(int id){
    SQLiteDatabase db = dbOpen.getReadableDatabase();

    Cursor c = db.query(Constants.TABLE_ITMES, null,
            Constants.ITEM_ID + " = " + id, null, null, null, null);
    int x =c.getCount(); 
/*edited here*/    c.moveToFirst();
/*and here*/    Log.d("GOT INTO DB", " count "+x +", body "+c.getString(c.getColumnIndex( Constants.ITEM_BODY)));
    return c;
}


2)尝试查询预定义值:

Cursor c = db.query(Constants.TABLE_NAME_ITMES, null,
            Constants.ITEM_BODY + "=?", new String[]{"green"}, null, null, null);


3)尝试使用' like'操作者:

Cursor c = db.query(Constants.TABLE_NAME_ITMES, null,
            Constants.ITEM_BODY + " like ?", new String[]{"%green%"}, null, null, null);


4)尝试使用这样的旧简单查询:

String query = "select * from " + Constants.TABLE_ITMES + " where " + Constants.ITEM_BODY + "=?";
Cursor c = db.rawQuery(query, new String[]{color});
相关问题