游标是空的,但查询(假设)是正确的

时间:2018-05-12 17:56:37

标签: java android sqlite

我有一个非常奇怪的问题。 我的片段看起来像那样

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)。

数据库看起来像这样: enter image description here

所以举个例子。血液结果是10(它是用户唯一插入的东西)和它的下午7点(19小时,24小时的惯例 - 该程序正在给出最接近的测试时间,因此它是' 18)。因此,查询看起来像

SELECT * FROM insulina WHERE godzina = 18 AND cukier = 10

这就是我的问题。应用程序将游标长度识别为0(应该为1),即使我的其他与数据库创建相关的应用程序(SQL Browser的DB Browser)正在使用相同的查询正确地给出我的结果 enter image description here

此外,Android Studio表示数据库已成功打开。

我在这里找不到错。我真的很困惑这个问题。

1 个答案:

答案 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

看起来你正在使用"尝试使用资源"所以近在咫尺并非如此。