Регистрация SQL-операторов в Android; уволен по заявке - PullRequest
0 голосов
/ 10 мая 2010

У меня небольшое приложение для Android, и в настоящее время я запускаю SQL-оператор в Android, чтобы получить количество строк в базе данных для определенного предложения where.

Ниже приведен пример кода:

public boolean exists(Balloon balloon) {
    if(balloon != null) {
        Cursor c = null;
        String count_query = "Select count(*) from balloons where _id = ?";
        try {
            c = getReadableDatabase().rawQuery(count_query, new String[] {balloon.getId()});
            if (c.getCount() > 0)
                return true;

        } catch(SQLException e) {
            Log.e("Running Count Query", e.getMessage());
        } finally {
            if(c!=null) {
                try {
                    c.close();
                } catch (SQLException e) {}
            }
        }
    }
    return false;
}

Этот метод возвращает мне счет 1, даже если таблица базы данных фактически пуста. Я не могу понять; почему это произойдет. Выполнение одного и того же запроса в базе данных дает мне счет 0.

Мне было интересно, можно ли войти или посмотреть в журнале все SQL-запросы, которые в конечном итоге запускаются в базе данных после замены параметров; чтобы я мог понять, что происходит.

Приветствия

1 Ответ

3 голосов
/ 10 мая 2010

Этот запрос всегда будет возвращать одну запись (как и любая SELECT COUNT). Причина в том, что возвращаемая запись содержит поле, которое указывает, сколько записей присутствует в таблице «выносок» с этим идентификатором.

Другими словами, одна запись (c.getcount()==1) НЕ говорит о том, что количество записей, найденных в всплывающих подсказках, равно единице, скорее это запись, сгенерированная Sqlite, которая содержит поле с результатом.

Чтобы узнать количество воздушных шаров, вам нужно c.movetofirst(), а затем numberOfBalloons = c.getInt(0)

...