Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 带字符的FMDB查询_Objective C_Sqlite_Fmdb - Fatal编程技术网

Objective c 带字符的FMDB查询

Objective c 带字符的FMDB查询,objective-c,sqlite,fmdb,Objective C,Sqlite,Fmdb,我目前正在尝试对单词数据库执行查询。数据库是有组织的,我可以通过单词的第一个字母和单词的长度来访问。但是,当我使用字母和长度进行搜索时遇到了问题: //random letter sends an NSString with just a single letter from the English alphabet NSString * randomLetter = [self randomLetter]; int characterCodeInASCII = [randomLetter ch

我目前正在尝试对单词数据库执行查询。数据库是有组织的,我可以通过单词的第一个字母和单词的长度来访问。但是,当我使用字母和长度进行搜索时遇到了问题:

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

  • 啊!好吧,我没有意识到标准executeQuery调用需要对象。谢谢,我最后使用了第二种方法,效果非常好!