Курсор пуст, но запрос (предположительно) правильный - PullRequest
0 голосов
/ 12 мая 2018

У меня очень странная проблема. Мой фрагмент выглядит так

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), даже если мое другое приложение, связанное с созданием базы данных (DB Browser for SQLite), правильно выдает мой результат с тем же запросом enter image description here

Также Android Studio сообщает, что база данных успешно открыта.

Я не могу найти здесь ошибку. И я действительно запутался с этой проблемой.

1 Ответ

0 голосов
/ 12 мая 2018

Я думаю, что запрос должен быть:

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

Также похоже, что вы используете «попробовать с ресурсами», поэтому закрытие не является явным образом необходимым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...