我目前正在尝试对单词数据库执行查询。数据库的组织方式使我可以按单词的第一个字母和单词的长度进行访问。然而,当我使用字母和长度进行搜索时,我遇到了麻烦:
//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];
遗憾的是,查询没有返回任何值。我尝试过使用char作为输入、字符串和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]]
有什么我可能遗漏的想法吗?
非常感谢!
FMDB期望executeQuery:
方法的所有参数都是对象,而int
不是对象。
你可以采取以下几种方法:
-
在
NSNumber
中装箱int
。看起来是这样的: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];
-
使用不同的方法,例如
executeQueryWithFormat:
方法:FMResultSet *rs = [db executeQueryWithFormat:@"SELECT * FROM WORDS WHERE INDEXER = %d AND LENGTH + %d", characterCodeInASCII, length];