iphone SQLite Select Query не работает - PullRequest
2 голосов
/ 10 июля 2009

В приведенном ниже коде я подключаюсь к базе данных SQLite, запрос SELECT не работает.

Я надеюсь, что вы можете мне помочь.

Спасибо

if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
    // Setup the SQL Statement and compile it for faster access
    const char *sqlStatement = "select name,score from game Where name='interclock'";
    sqlite3_stmt *compiledStatement;
    if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {



        // Loop through the results and add them to the feeds array
        //while(sqlite3_step(compiledStatement) == SQLITE_ROW) {
        if(sqlite3_step(compiledStatement) == SQLITE_ROW) {
            // Read the data from the result row

            NSString *aName =[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)];
            NSString *aScore =[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)];

            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Sonuç" message:[NSString stringWithFormat:@"Oyun adı %s Skor:%s",aName,aScore] 
                                                           delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
            [alert show];   

            //NSString *aName = [NSString stringWithString:(NSString *)sqlite3_column_text(compiledStatement, 2)];
            //NSString *aScore = [NSString stringWithString:(NSString *)sqlite3_column_text(compiledStatement, 3)];



            // Create a new animal object with the data from the database
            DatabaseClass *dbOBJ = [[DatabaseClass alloc] initWithName:aName score:aScore];

            // Add the animal object to the animals Array
            [scores addObject:dbOBJ];

            [dbOBJ release];
        } else {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"SQL Query Dont Work" 
                                                           delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
            [alert show];
        }
    }
    // Release the compiled statement from memory
    sqlite3_finalize(compiledStatement);

} else {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"No Connection" 
                                                   delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
    [alert show];
}

Ответы [ 3 ]

3 голосов
/ 10 июля 2009

Это неверно

 NSString *aName =[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)];
 NSString *aScore =[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)];

должно быть

 NSString *aName =[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 0)];
 NSString *aScore =[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)];
0 голосов
/ 15 ноября 2011

вы должны получить такой путь;

NSString *path = [[NSBundle mainBundle]pathForResource:@"sarkiSozleri"ofType:@"sqlite"];
0 голосов
/ 10 июня 2011

Это может быть правильно в зависимости от того, какой столбец вы хотите получить. В этом примере я думаю, что таблица базы данных содержит 3 столбца: id, aName и aScore. Проблема не в этом, а здесь:

if(sqlite3_step(compiledStatement) == SQLITE_ROW) {

Убедитесь, что ваш compiledStatement возвращает правильное значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...