2011-06-20 47 views
0

我传递一个对象给我正在执行查询的方法。我的方法是:通过SQLIte数据库访问一个对象

-(BOOL)searchWordInDatabase:(NSString *)string 
{ 
NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory= [paths objectAtIndex:0]; 
NSString *path=[documentsDirectory stringByAppendingPathComponent:@"SymbolTalkLanguageElement.sqlite"]; 

//Open the database 
//might have to make database as property 
if(sqlite3_open([path UTF8String], &dataBase) ==SQLITE_OK) 
{ 
    const char *sql="select ImageName from tblLanguageElement where Category= string"; 
    sqlite3_stmt *statement; 

    if(sqlite3_prepare(dataBase, sql, -1, &statement, NULL) == SQLITE_OK) 
    { 
     while (sqlite3_step(statement) == SQLITE_ROW) 
     { 
      NSLog(@"%@",[NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 0)]); 
      //[list addObject:[NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 0)]]; 
      return YES; 
     } 

    } 



} 
return NO; 

}

但我没有收到查询字符串的值。我该怎么做?

回答

2

查询中存在错误。你不能像这样替换一个字符串。以下面的方式做。

NSString *sqlStr = [NSString stringWithFormat:@"select ImageName from tblLanguageElement where Category = '%@'", string]; 
char *sql = (char *)[sqlStr UTF8String]; 
1

确保您的数据库存在于您检索的路径中。在执行语句时,您可以按如下方式绑定字符串变量。

const char *sql = "select ImageName from tblLanguageElement where Category = ?"; 
sqlite3_stmt *statement; 
if(sqlite3_prepare(dataBase, sql, -1, &statement, NULL) == SQLITE_OK) 
{ 
     sqlite3_bind_text(statement, 1, [string UTF8String], -1, SQLITE_TRANSIENT); 

     while (sqlite3_step(statement) == SQLITE_ROW) 
     { 
      NSLog(@"%@",[NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 0)]); 
      //[list addObject:[NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 0)]]; 
     return YES; 
     } 
}