2011-06-20 15 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; 
     } 
} 
関連する問題