使用查询直接工作时,Android select语句通过rawquery或query返回无结果

时间:2014-08-30 18:46:35

标签: android sqlite

到目前为止,我花了整整一天试图获取一个选择查询来执行viarawquery或查询,但到目前为止我没有运气。 我想要运行的select语句如下:

 SELECT * FROM h_word WHERE category='GRE' AND DONE=0  ORDER BY RANDOM() LIMIT 1 

category是TEXT类型列,DONE是INTEGER类型,默认值为0.

虽然查询在SQLite中直接执行时工作正常,但在android中,它不会返回任何结果。 我没有运气尝试下面的方法(该方法位于从SQLiteAssetHelper扩展的类中,它本身是一个最初从SQLiteOpenHelper扩展的辅助类,最初取自这里:https://github.com/jgilfelt/android-sqlite-asset-helper

    public Cursor getRandomWord() {
    Cursor c;
    SQLiteDatabase db = getWritableDatabase();

    c=db.rawQuery(query, null);
    String query = "SELECT * FROM h_word WHERE category='GRE'  AND DONE='0'  
    ORDER BY RANDOM() LIMIT 1 ";
    c=db.rawQuery(query, new String[] {});
    c.moveToFirst();
    db.close(); 
    return c;

    }

我也用GRE代替'GRE'和0而不是'0'进行测试,但它没有任何区别。 做了以下事情:

        public Cursor getRandomWord() {
        Cursor c;
        SQLiteDatabase db = getReadableDatabase();
        c=db.query(true, "h_word", new String[] {
                 "_id",
                 "word",
                 "english_meaning"

                },
                 "category" + "=?" + " AND "  +
                 "DONE" + "=?",
                 new String[]{"GRE" ,"0"},
                 null, null, "RANDOM() LIMIT 1" , null);
        c.moveToFirst();
        db.close(); 
        return c;
    }

但光标仍为空。

任何想法我可能在这里做错了吗? 任何帮助将非常感激。 PS:当运行一个没有where子句的简单select语句时,工作正常。

1 个答案:

答案 0 :(得分:0)

经过几个小时的挣扎,我发现这是android的SQLiteDatabase类中的一个错误。

我设法通过将“类别”列的名称更改为其他内容来解决问题。 似乎“category”是android SQLiteDatabase代码中的一个关键词,并且当在android端的where子句中写入时,查询不返回任何内容。

其他人也有这个问题: Android rawquery with dynamic Where clause