2012-01-31 67 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