2012-02-03 64 views
0

我也跟着有關創建SQLite數據庫,插入數據,並從中尋找數據的教程和使用下面的方法來從數據庫中提取數據:如何從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);}} 

當我編譯,沒有錯誤!沒有注意!但不工作...

,我發現那是什麼,因爲

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 2012-02-03 16:24:38