到目前为止,我花了整整一天试图获取一个选择查询来执行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语句时,工作正常。
答案 0 :(得分:0)
经过几个小时的挣扎,我发现这是android的SQLiteDatabase类中的一个错误。
我设法通过将“类别”列的名称更改为其他内容来解决问题。 似乎“category”是android SQLiteDatabase代码中的一个关键词,并且当在android端的where子句中写入时,查询不返回任何内容。
其他人也有这个问题: Android rawquery with dynamic Where clause