我有一个非常奇怪的问题。 我的片段看起来像那样
public Wynik getData(int pomiar, int godzina) {
Wynik wynik = null;
String query = "SELECT * FROM " + "insulina" + " WHERE godzina = " + godzina +
" AND cukier = " + pomiar;
SQLiteDatabase db = this.getReadableDatabase();
try (Cursor cursor = db.rawQuery(query, null)) {
Log.i("tag", "cursor length:" + cursor.getCount());
if (cursor.getCount() > 0) {
String s = DatabaseUtils.dumpCursorToString(cursor);
Log.d("s", s);
cursor.moveToFirst();
wynik = new Wynik
(cursor.getInt(cursor.getColumnIndexOrThrow("godzina")),
cursor.getString(cursor.getColumnIndexOrThrow("insulina")),
cursor.getInt(cursor.getColumnIndexOrThrow("dawka")),
cursor.getString(cursor.getColumnIndexOrThrow("cialo")));
}
cursor.close();
return wynik;
(对不起英国惯例,但它本来是快速的,常规的项目)
整个应用程序的想法是帮助我的朋友与他的祖母的糖尿病。他会插入血糖水平测试结果(cukier)并自动检查测试时间(godzina)。 基于这些,应用程序应返回一个完整的结果(wynik),所需剂量的胰岛素(dawka),它的类型(胰岛素)和应该采取血液的身体的一部分(cialo)。
所以举个例子。血液结果是10(它是用户唯一插入的东西)和它的下午7点(19小时,24小时的惯例 - 该程序正在给出最接近的测试时间,因此它是' 18)。因此,查询看起来像
SELECT * FROM insulina WHERE godzina = 18 AND cukier = 10
这就是我的问题。应用程序将游标长度识别为0(应该为1),即使我的其他与数据库创建相关的应用程序(SQL Browser的DB Browser)正在使用相同的查询正确地给出我的结果
此外,Android Studio表示数据库已成功打开。
我在这里找不到错。我真的很困惑这个问题。
答案 0 :(得分:1)
我认为查询应该是:
String query = "SELECT * FROM insulina WHERE godzina = ? AND cukier = ?";
SQLiteDatabase db = this.getReadableDatabase();
try (Cursor cursor = db.rawQuery(query, new String[]{String.valueOf(godzina), String.valueOf(pomiar)})) {
//... rest of code
看起来你正在使用"尝试使用资源"所以近在咫尺并非如此。