3

私は現在、単語のデータベースに対してクエリを実行しようとしています。データベースは、単語の最初の文字と単語の長さでアクセスできるように構成されています。ただし、文字と長さを使用して検索すると問題が発生します。

//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を使用してこれを試しました。

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

私が見逃しているかもしれないものについてのアイデアはありますか?

どうもありがとう!

4

1 に答える 1

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];
    
于 2012-01-31T15:47:29.217 に答える