iPhoneSdk,SQLite数据库搜索查询不起作用 [英] iPhoneSdk, SQLite database search query not work

查看:42
本文介绍了iPhoneSdk,SQLite数据库搜索查询不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想知道如何在搜索查询中传递特定的单词或字符以查找记录. 我以"%%% @ %%"之类的格式传递.
但这不会给我输出...
这是我的代码...

i want to know how to pass particular word or character in search query to find records.. i am passing in the format like '%%%@%%'.
but it doesn't give me output...
this is my code...

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);    
}

如果我通过单词"s"传递相同的查询,则在sqlite查询生成器中获得100条记录,但如果m通过以上代码,则不会搜索任何记录
请帮助我

if i pass a same query with word "s" i got 100 of record in sqlite query builder but if m pass through above code it doesn't serach any record
please help me

推荐答案

我处理了上面给出的代码,并按如下所示对其进行了修复

I worked on the code given above and fixed it as follows

-(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 *之间找到更改的部分.您还想阅读

The changed portions can be found between Double *. you would also like to read this

我更改的两个步骤是打开数据库连接,您必须在其他位置完成该连接,然后从searchName中删除".让我们知道这是否可以解决问题.

Two steps that I changed were opening the database connection which You must have done elsewhere and second removing the '' from searchName. Do let us know if this resolves the issue.

这篇关于iPhoneSdk,SQLite数据库搜索查询不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆