2016-04-21 2 views
0

Мне нужно получить все записи из таблицы. Мой подход заключается в следующем:Android SQLite Запрос между датами не работает

public int getTasksByStatusIDBetweenDates(int statusID, String startDate, String endDate) { 

    SQLiteDatabase db = this.getReadableDatabase(); 
    Cursor cursor = db.rawQuery(
      "select * from Task" + 
        " where StatusID=" + statusID + " and AssignDate between '" + startDate + "' and '" + endDate + "'", null); 

    int total = 0; 
    if (cursor.moveToFirst()) 
     total = cursor.getInt(0); 

    cursor.close(); 
    return total; 
} 

В настоящее время она возвращается меня 0. Мой формат даты «гггг-мм-дд чч: мм: сс»

Пожалуйста, наставит меня, где я делаю неправильно , Благодаря !

+0

Где вы называете этот метод? Можете ли вы опубликовать код, который я упомянул? –

+0

@ noman-hamid: формат даты, хранящийся в вашем db, такой же, как формат даты вашего аргумента startDate и endDate ??? –

+0

@ AntónioPaulo Я просто получаю счет от этой функции и переменной integer в своей деятельности. Но число, которое я получаю от этого запроса, равно 0. – Noman

ответ

1

Или в существующий код просто позвонить cursor.getCount();

total=cursor.getCount();

Cursor.getCount();
Возвращает количество строк в курсоре.

ОБНОВЛЕНО
запрос, чтобы получить записи ч/б два дня SO - How to select data between two date range in android SQLite

Запрос является
SELECT * FROM mytab where my_date BETWEEN '2016-03-01 00:00:00' AND '2016-03-19 00:00:00'

happyCoding;

+0

Вы попробовали это? – Bharatesh

+0

Да, я пробовал это. Скажите мне 1 вещь, я использую тип данных AssigneDate как текст в таблице .. это нормально, или мне нужно использовать тип данных DATETIME? – Noman

+0

хорошо для меня TEXT type работает хорошо .., но старайтесь с DateTime тоже. – Bharatesh

0

Я думаю, вы должны использовать COUNT (*) вместо просто *.

Попробуйте это.

public int getTasksByStatusIDBetweenDates(int statusID, String startDate, String endDate) { 

    SQLiteDatabase db = this.getReadableDatabase(); 
    Cursor cursor = db.rawQuery(
      "select count(*) from Task" + 
        " where StatusID=" + statusID + " and AssignDate between '" + startDate + "' and '" + endDate + "'", null); 

    int total = 0; 
    if (cursor.moveToFirst()) 
     total = cursor.getInt(0); 

    cursor.close(); 
    return total; 
} 
+0

Пробовал это. Не работает – Noman

0

Запрос с SELECT * возвращает все столбцы всех строк таблицы.

cursor.getInt(0) возвращает значение первого столбца текущей строки курсора.

Чтобы подсчитать строки, вы можете использовать запрос с SELECT COUNT(*) ... и прочитать значение, возвращаемое этим. В качестве альтернативы, используйте полезные helper function, что строит запрос для вас:

public int getTasksByStatusIDBetweenDates(int statusID, String startDate, String endDate) { 
    SQLiteDatabase db = this.getReadableDatabase(); 
    return DatabaseUtils.queryNumEntries(
      db, "Task", 
      "StatusID=" + statusID + " and AssignDate between ? and ?", 
      new String[]{ startDate, endDate }); 
} 
+0

Пробовал, что .. Не работает .. AssignedDate в моей таблице - текст. – Noman

Смежные вопросы