2012-02-03 16 views
0

iは、SQLiteのデータベースを作成するデータを挿入し、そこからデータを検索に関するチュートリアルを追跡し、そのDBからデータを抽出するために以下の方法を用いる:sqliteから名前でデータを検索する方法は?

-(IBAction)findContacts{ 

    const char *dbpath = [databasePath UTF8String]; 
    sqlite3_stmt *statement; 
    if (sqlite3_open(dbpath, &contactDB)==SQLITE_OK) { 
     NSString *querySQL = [NSString stringWithFormat:@"SELECT adress, phone FROM CONTACTS WHERE name = \"%@\"", [name text]]; 
     status.text = querySQL;   
     const char *query_stmt = [querySQL UTF8String]; 

     if (sqlite3_prepare_v2(contactDB, query_stmt, -1, &statement, NULL) == SQLITE_OK) { 
      if (sqlite3_step(statement)==SQLITE_ROW) { 

       NSString *adressField = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 0)]; 
       adress.text = adressField; 

       NSString *phoneField = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 1)]; 
       phone.text = phoneField; 

       status.text = @"Match Found"; 

       [adressField release]; 
       [phoneField release];} 

        status.text = @"Match not Found"; 
        adress.text = @""; 
        phone.text = @""; 
      sqlite3_finalize(statement);} 
     sqlite3_close(contactDB);}} 

iをコンパイルするとき、エラーなし!注意しないで!しかし、私が見つけたもの

sqlite3_prepare_v2(contactDB, query_stmt, -1, &statement, NULL) == SQLITE_OK) 

が等しくなかったので、コードはstatemens場合できていなかったということでした...動作しません。私は

sqlite3_prepare_v2(contactDB, query_stmt, -1, &statement, NULL) != SQLITE_OK) 

と条件を逆にしてstatus.textで見たとき、「一致するものが見つからない」ということが分かりました。それでも真の連絡先を見つけることができませんでした。

あなたはコードに間違ったことを認識しましたか?

事前のおかげで...

答えて

1

「sqlite3_prepare_v2」の結果は、実際にSQLITE_OKでない限り、あなたは本当にブロックを入力する必要はありません。

等価要件を '!='に変更することは面白い診断でしたが、明らかにテストコードに永続的に残すべき変更ではありません。今

たちはsqlite3_prepare_v2は、成功のためのコードを返さないことを知っていること、聞いて疑問がある:それはどのようなコードを返すのですか?

文書によれば、ここに示したコードのいずれかを返すする必要があります。

http://sqlite.org/c3ref/c_abort.html

また、文字列表現を取得するために「sqlite3_errmsg」を使用することができます。参照:http://sqlite.org/c3ref/errcode.html

+0

あなたの助けによって解決されました。おかげでque que ... :) – Karaca

関連する問題