2012-01-31 63 views
3

我正在嘗試對單詞數據庫執行查詢。數據庫的組織方式使我可以通過單詞的首字母和單詞的長度來訪問。但是,當我使用字母和長度進行搜索時,遇到問題:帶字符的FMDB查詢

//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。

我很困惑,因爲我可以用紅寶石做同樣的查詢:

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]] 

關於我可能錯過的任何想法?

非常感謝!

回答

2

FMDB期待executeQuery:方法的所有參數都是對象,並且int不是對象。

有一對夫婦的方法,你可以採取:

  1. 箱的intNSNumber。這將是這樣的:

    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]; 
    
+0

啊!好吧,我沒有意識到它需要標準的executeQuery調用的對象。謝謝,我結束了第二種方法,它效果很好! – Ray 2012-01-31 16:29:29