Запрос FMDB с символом - PullRequest
       10

Запрос FMDB с символом

3 голосов
/ 31 января 2012

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

//random letter sends an NSString with just a single letter from the English alphabet
NSString * randomLetter = [self randomLetter];
int characterCodeInASCII = [randomLetter characterAtIndex:0];

FMResultSet *rs = [db executeQuery:@"SELECT * FROM WORDS WHERE INDEXER=? AND LENGTH=?",characterCodeInASCII,length];

К сожалению, запрос не возвращает никаких значений. Я пробовал это, используя символ в качестве ввода, как строку, и как int.

Я в замешательстве, так как могу выполнить тот же запрос, используя ruby:

list=db1.execute("SELECT * FROM WORDS WHERE INDEXER=110 AND LENGTH=7")

И получите 453 результата ....

Таблица sqlite имеет следующие столбцы:

>> db1.execute("SELECT * FROM sqlite_master")
=> [["table", "words", "words", 2, "CREATE TABLE words(word VARCHAR(15) PRIMARY KEY, indexer VARCHAR(1), length INTEGER)"], ["index", "sqlite_autoindex_words_1", "words", 3, nil]]

Есть идеи о том, чего мне не хватает?

Большое спасибо!

1 Ответ

2 голосов
/ 31 января 2012

FMDB ожидает, что все аргументы метода executeQuery: будут объектами, а int не является объектом.

Существует несколько подходов, которые вы можете использовать:

  1. Коробка int в NSNumber. Это будет выглядеть так:

    NSString *randomLetter = ...;
    NSNumber *characterCode = [NSNumber numberWithInt:[randomLetter characterAtIndex:0]];
    
    NSNumber *length = [NSNumber numberWithInt:lengthAsInt];
    FMResultSet *rs = [db executeQuery:@"SELECT * FROM WORDS WHERE INDEXER=? AND LENGTH=?", characterCode, length];
    
  2. Используйте другой метод, например executeQueryWithFormat: метод:

    FMResultSet *rs = [db executeQueryWithFormat:@"SELECT * FROM WORDS WHERE INDEXER = %d AND LENGTH + %d", characterCodeInASCII, length];
    
...