2016-09-19 7 views
0

У меня есть два параметра (tenant_id и dateIn). с моим запросом ниже я всегда получаю -1 в качестве результата. Я не знаю, где проблема в запросе.Результаты поиска Android после даны две даты параметра и id

Пожалуйста, обратите внимание, что формат даты в базе данных является dd/MM/yyyy

 public final static String ID = "id"; 
public final static String TENANT_ID = "tenant_id"; 
    public final static String DEBT_CURRENT_VALUE = "debt_current_value"; 
public final static String DEBT_SUM = "debt_sum_value"; 
public final static String DEBT_DATE = "debt_date"; 

    public long getTenantDateDebtByIdandDate(long id, String dateIn) { 
    long idout = -1; 
    String[] columns = {ID, TENANT_ID, DEBT_CURRENT_VALUE,DEBT_SUM, DEBT_DATE }; 
    String selection = "TENANT_ID = " + id + " AND " + "DEBT_DATE < " + "date("+ dateIn+")"; 
    Cursor cursor = mDatabase.query(TABLE_TENANT_DEBT, columns, selection, null, null, null, null); 
    if (cursor.moveToNext()) { 

     idout = cursor.getLong(cursor.getColumnIndex(DEBT_DATE)); 
    } 
    cursor.close(); 
    return idout; 
} 
+0

Что такое 'TABLE_TENANT_DEBT'? – Vyacheslav

+0

: 'DEBT_DATE =" DEBT_DATE "'? – Vyacheslav

+0

'TABLE_TENANT_DEBT' - это таблица, а DEBT_DATE - столбец. один пример значения в DEBT_DATE - 10/09/2016 –

ответ

0

Я думаю, что есть ошибка с именами столбцов, по крайней мере

не является ли это: String selection = "TENANT_ID = " + id + " AND " + "DEBT_DATE < " + "date("+ dateIn+")"; проверочные столбцы с именем TENANT_ID и DEBT_DATE , когда на самом деле вы хотите проверить столбцы «tenant_id» и «debt_date».

Так что я думаю, что выбор должен быть вместо этого: String selection = TENANT_ID + " = " + id + " AND " + DEBT_DATE + " < " + "date("+ dateIn+")";

Я не так хорошо знаком с датами в SQLite, но если функция даты не работает в этом случае, может быть, вы должны смотреть в strftime function of sqlite

Кроме того, я бы рекомендовал использовать аргументы where. Итак, в основном вместо того, чтобы говорить TENANT_ID + " = " + id, вы бы сказали TENANT_ID + " = ?" и сменили DEBT_DATE аналогичным образом. Затем вы дадите функции запроса еще один массив, имеющий значения, которые затем используются в местах вопросительных знаков в том порядке, в котором они находятся в массиве. Запрос более безопасен таким образом, см. Более подробную информацию о том, почему использовать аргументы args и полный пример в этом Stackoverflow thread в случае, если вы заинтересованы.

+0

У меня есть выбор: 'String selection = TENANT_ID +" = "+ id +" AND "+ DEBT_DATE +" <"+" date ("+ dateIn +") ";' но без изменений –

+0

I подумайте, что если вы не хотите использовать stftime, ваша дата должна быть в формате yyyy-MM-dd. Я попытался с sqlite-базой данных создать тестовую таблицу (datetest) с одним столбцом с именем order_date с только одной строкой, имеющей значение 2011-08 -15. При этом запрос: выберите дату (order_date) из datetest, где order_date <'2011-08-16'; возвращает строку, но дату выбора запроса (order_date) из datetest, где order_date <'2011-08-15'; не – Pete

+0

Если после этого все еще не возвращаются никакие строки, убедитесь, что дата, которую вы передаете функции, также находится в том же формате, и tha t в базе данных есть записи, которые имеют более раннюю дату, чем то, что вы передаете, и идентификатор, который вы передаете в запрос – Pete

0

Наконец с обратной связью Петра и некоторые resaerch я нашел решение

public String getTenantDateDebtByIdandDate(long id, String dateIn) { 
    String idout = ""; 
    String[] columns = {TENANT_ID, DEBT_DATE }; 
    String selection = TENANT_ID + " = '" + id + "' AND " + DEBT_DATE + " < " + "'"+ dateIn + "'"; 
    Cursor cursor = mDatabase.query(TABLE_TENANT_DEBT, columns, selection, null, null, null, null); 
    while (cursor.moveToNext()) { 

     idout = cursor.getString(cursor.getColumnIndex(DEBT_DATE)); 
    } 
    cursor.close(); 
    return idout; 
}