Поиск БД SQLite3 в iPhone по данным, введенным в UITextfield - PullRequest
1 голос
/ 17 июня 2011

Я довольно новичок в разработке для iOS. Я пытаюсь создать приложение, которое выполняет поиск по данному поисковому запросу в базе данных sqllite3. У меня проблемы с привязкой параметра к этому выражению sql. Следующий код - мой код для чтения данных из базы данных.

-(void) readPlayersFromDatabase 
{
NSString * strTemp=[[NSString alloc]init];
strTemp=@"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 в коде выше?

Спасибо.

1 Ответ

0 голосов
/ 17 июня 2011

Что именно вы хотите сделать?Вы можете отправить в качестве параметра свой метод 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));
}

}
...