2011-06-24 60 views
0

我想知道如何通过搜索查询中的特定单词或字符来查找记录。 我传递格式如'%%% @ %%'。
但它并没有给我......输出
这是我的代码...iPhoneSdk,SQLite数据库搜索查询不起作用

searchName = [NSString stringWithFormat:@"'%%%@%%'",[[NSUserDefaults standardUserDefaults] objectForKey:@"key"]]; 
-(void)getSearchData 
{ 

     NSLog(@"search Name %@", searchName); 

    searchArray = [[NSMutableArray alloc] init]; 

    const char *sql = "select * from features where lower(name) like ? limit 500"; 
    if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL)!= SQLITE_OK) 
    { 
     NSAssert1(0,@"error : failed to prepare statement with message '%s'.",sql ite3_errmsg(database)); 

     } 
    sqlite3_bind_text(selectstmt, 1, [searchName UTF8String], -1, SQLITE_TRANSIENT); 
    // sqlite3_bind_text(selectstmt, 2, [state UTF8String], -1, SQLITE_TRANSIENT); 

    while (sqlite3_step(selectstmt) == SQLITE_ROW) 
    { 

     NSMutableDictionary *datah = [[NSMutableDictionary alloc] init]; 

     [datah setObject:[NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt,0)] forKey:@"number"]; 

     [datah setObject:[NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt,1)] forKey:@"name"]; 

     [datah setObject:[NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt,2)] forKey:@"type"]; 

     [datah setObject:[NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt,4)] forKey:@"country"]; 

     [datah setObject:[NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt,5)] forKey:@"lat"]; 

     [datah setObject:[NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt,6)] forKey:@"long"]; 

     [datah setObject:[NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt,7)] forKey:@"elevation"]; 

     [datah setObject:[NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt,8)] forKey:@"area"]; 

     [datah setObject:[NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt,3)] forKey:@"state"]; 

     [searchArray addObject:datah]; 
     [datah release]; 
    } 
    sqlite3_reset(selectstmt);  
} 

如果我通过与词“的”我的SQLite查询生成器有记录的100相同的查询,但如果M通过上面的代码没有任何检索算法记录
请帮我

回答

1

我的工作上面给出的代码和固定它如下

-(void)getSearchData:(NSString*)searchText 
{ 

    **NSString* searchName = [NSString stringWithFormat:@"%%%@%%",searchText];** 
    NSLog(@"search Name %@", searchName); 
    sqlite3 *database; 
    sqlite3_stmt *selectstmt; 
    NSString* searchQuery = @"SELECT * FROM contacts WHERE lower(name) like ?"; 
    const char *sql = [searchQuery UTF8String]; 
     **if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {** 
      if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) != SQLITE_OK) 
      { 
      //NSAssert1(0,@"error : failed to prepare statement with message '%s'.",sql ite3_errmsg(database)); 

      } 
      sqlite3_bind_text(selectstmt, 1, [searchName UTF8String], -1, SQLITE_STATIC); 
      while (sqlite3_step(selectstmt) == SQLITE_ROW) 
      {  
      NSLog(@"%@",[NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt,0)]); 
      } 
      sqlite3_reset(selectstmt);  
     } 
    sqlite3_close(database); 
} 

可以在Double *之间找到更改的部分。你也想看​​

我改变了两个步骤是打开数据库连接,你必须在其他地方完成,然后从searchName删除''。请让我们知道这是否能解决问题。

+0

你为什么不添加你的图片?使用gravtar.com为你的头像。 –

+0

这真的很感谢....我只是犯了一个错误,在单引号查询中传递一个searchName。 thanx再次... – Hiren

+0

@Rahul干得好。 +1提供正确的代码和链接到详细说明。 –