2011-06-17 34 views
1

我对iOS开发相当新颖。我正在尝试构建在sqllite3 DB中搜索给定搜索词的应用程序。我在绑定参数到该sql语句时遇到了问题。以下是我从数据库读取数据的代码。从UITextfield给出的输入在iPhone中搜索SQLite3 DB

-(void) readPlayersFromDatabase 
{ 
NSString * strTemp=[[NSString alloc]init]; 
[email protected]"ben"; 
sqlite3 *database; 
players = [[NSMutableArray alloc] init]; 
if(sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) 
{ 
    char *sqlStatement = "SELECT * FROM Player WHERE LENGTH (lastname)>0 AND LENGTH (firstname)>0 AND (lastname LIKE '%?%' OR firstname LIKE'%?%' OR Height LIKE '%?%' OR Weight LIKE '%?%') ORDER BY lastname,firstname"; 

sqlite3_stmt *compiledStatement; 
if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) 
{ 
    sqlite3_bind_text(compiledStatement, 1, [strTemp UTF8String],-1, SQLITE_TRANSIENT); 
    sqlite3_bind_text(compiledStatement, 2, [strTemp UTF8String],-1, SQLITE_TRANSIENT); 
    sqlite3_bind_text(compiledStatement, 3, [strTemp UTF8String],-1, SQLITE_TRANSIENT); 
    sqlite3_bind_text(compiledStatement, 4, [strTemp UTF8String],-1, SQLITE_TRANSIENT); 
    while(sqlite3_step(compiledStatement) == SQLITE_ROW) 
      { 
      NSString *playerId = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 0)]; 
     NSString *playerName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)]; 
     Player *temp = [[Player alloc] initWithID:playerId name:playerName]; 
      [players addObject:temp]; 
       [temp release]; 
    } 
} 
sqlite3_finalize(compiledStatement); 
} 
sqlite3_close(database); 

} 

我最后得到的是玩家的名字吗?以他们的名义。有人可以帮我从这里出去吗。你能告诉我如何在上面的代码中连接UITextfield输入到strTemp

谢谢。

回答

0

你想要做什么?您可以将readPlayersFromDatabase方法的参数作为参数发送到您的UITextfield输入。

这里是我选择命令的方法:我有一个叫做DBOperations的类。我希望这有助于

+ (int) getUserID{ 
//check DB 
if (![DBOperations checkDB]) 
{ 
    NSString *msgAlert = @"can not access db file."; 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"Connection error" message:msgAlert 
                delegate:self cancelButtonTitle:@"Ok" otherButtonTitles: nil]; 
    [alert show]; 
    [alert release]; 
    return 0; 
} 
[DBOperations open]; 

int _userID = 1; 

const char* sql = " select id from Oyuncu ORDER BY id desc"; 
if (sqlite3_prepare_v2(database, sql, -1, &hydrate_statement, NULL) != SQLITE_OK) { 
    NSAssert1(0, @"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(database)); 
} 

if (sqlite3_step(hydrate_statement)==SQLITE_ROW) 
{ 
    _userID= sqlite3_column_int(hydrate_statement,0); 
    NSLog(@"%d",_userID); 
} 
// Execute the query. 
sqlite3_finalize(hydrate_statement); 

return _userID; 

[DBOperations close]; 
} 


+(BOOL) checkDB { 
NSError *error; 
NSFileManager *fileManager = [NSFileManager defaultManager]; 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"dbOyun.db"]; 
BOOL success = [fileManager fileExistsAtPath:writableDBPath]; 
success = [fileManager fileExistsAtPath:writableDBPath]; 
if (success) return true; 
NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"dbOyun.db"]; 
success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error]; 
return success; 
} 


+ (void) open{ 

//check db validity 


NSString *dbPath; 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
dbPath = [documentsDirectory stringByAppendingPathComponent:@"dbOyun.db"]; 

if (sqlite3_open([dbPath UTF8String], &database) != SQLITE_OK) { 
    sqlite3_close(database); 
    NSAssert1(0, @"Failed to open database with message '%s'.", sqlite3_errmsg(database)); 
} 

} 
+0

我的第一个问题是,我无法将参数绑定到sqlite语句导致错误的结果集或没有结果集。 – slonkar 2011-06-17 13:53:29