2016-09-21 3 views
1

Я делаю запрос на мой FMDB, который выглядит, как этотFMDB SQL-запрос не возвращает никаких данных

long long lstartDate = 1467331200000; 
long long lendDate = 1468108800000; 


    [_queue inDatabase:^(FMDatabase *database) { 
     FMResultSet * result = [database executeQuery:@"SELECT * FROM dayEPOCTable WHERE date >= '?' AND date <= '?' ", lstartDate, lendDate]; 

Однако, когда запрос закончил у меня нет каких-либо предметов, доступных в результате.

LendDate & lstartDate оба имеют жестко закодированные значения, которые существуют в таблице, я перешел на Устройства, загрузил контейнер, чтобы проверить, чтобы эти значения отображались на SQL-db.

То, что я пытаюсь сделать, - это вернуть все строки между и включать lstartDate и lendDate, которые находятся в таблице.

ОБНОВЛЕНИЕ: Отличное долгое время для NSNumber. обновленный код выглядит следующим образом

NSNumber *lstartDate = [NSNumber numberWithLongLong:1467331200000]; 
    NSNumber *lendDate = [NSNumber numberWithLongLong:1468108800000]; 

[_queue inDatabase:^(FMDatabase *database) { 
      FMResultSet * result = [database executeQuery:@"SELECT * FROM dayEPOCTable WHERE date >= '?' AND date <= '?' ", lstartDate, lendDate]; 

ответ

1

result == nil? Если это так, это означает, что произошла ошибка, и вы можете посмотреть [database lastErrorMessage], чтобы узнать, что произошло.

Одна ошибка выскакивает на меня, хотя: когда вы используете ? заполнители в вашем SQL, вы не должны использовать кавычки. Так удалить эти:

FMResultSet * result = [database executeQuery:@"SELECT * FROM dayEPOCTable WHERE date >= ? AND date <= ?", @(lstartDate), @(lendDate)]; 
NSAssert(result, @"executeQuery error: %@", [database lastErrorMessage]); 

Там, конечно, может быть много других возможных источников проблем, но это, где я начинал, а именно устранение кавычки и проверки, чтобы увидеть, если executeQuery успешно или нет, и если он не удалось получить сообщение об ошибке SQLite.


Обратите внимание, как executeQuery documentation says в отношении к переменным числом параметров, поставляемых для ? заполнителей:

Дополнительные параметры для привязки к ? заполнителей в операторе SQL. Это должны быть объекты Objective-C (например, NSString, NSNumber и т. Д.), А не базовые типы данных C (например, int, char * и т. Д.).

Таким образом, в приведенном выше примере, я заменил lstartDate и lendDate с @(lstartDate) и @(lendDate). Это делает их NSNumber объектов.

+0

Я пробовал следующее, и запрос сработает, прежде чем я могу зарегистрировать ошибку. Он переводит меня в строку 817 FMDB: obj = va_arg (args, id); Этот вопрос исчезает, когда я использую '?' поэтому я не уверен, что делать здесь. – HurkNburkS

+0

Также, если это помогает, дата хранится как BIGINT в таблице – HurkNburkS

+0

Извините, я не заметил, что они были длинными. Вы должны обернуть их в 'NSNumber' (например, используя синтаксис' @ (...) 'для' NSNumber', если хотите, как и в моем пересмотренном ответе). Эта вариационная версия ожидает, что все параметры будут объектами, но 'long long' является фундаментальным типом данных. – Rob

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