sqlite, запрос на выбор не работает - PullRequest
1 голос
/ 06 марта 2012
- (UserInfo*)getCurrentUserInfo:(NSString*)userName
{
    UserInfo *userInfo = [[UserInfo alloc]init];

    sqlite3 *database;
    sqlite3_stmt *selectstmt;
    NSLog(@"userName:%@",userName);
    if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
        NSString *sqlString = [NSString stringWithFormat:@"SELECT USER_LEVEL FROM USER_INFO WHERE USER_NAME = '%@'" , userName];
        NSLog(@"getCurrentUserInfo:%@",sqlString);
        const char *SqlCommand = [sqlString UTF8String];
        if (sqlite3_prepare_v2(database, SqlCommand, -1, &selectstmt, NULL) == SQLITE_OK) {
            NSLog(@"success!");
            while (sqlite3_step(selectstmt) == SQLITE_ROW) {
                NSString *userInfoStr = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 0)];
                NSLog(@"select result:%@",userInfoStr);
            }
        }
        sqlite3_finalize(selectstmt);
    }
    sqlite3_close (database);
    return userInfo;
}

мой лог выводит следующее:

2012-03-06 17:50:11.556 MagicWords[508:f803] userName:Tan
2012-03-06 17:50:11.557 MagicWords[508:f803] getCurrentUserInfo:SELECT USER_LEVEL FROM USER_INFO WHERE USER_NAME = 'Tan'

Он не печатает "success", поэтому sqlite3_prepare_v2 не возвращает yes.но моя база данных в порядке:

Я не могу найти проблему?

Ответы [ 3 ]

2 голосов
/ 06 марта 2012

Добавить сообщение об ошибке sqlite.Это даст понимание того, что происходит внутри.Если все в вашей базе данных верно, проверьте имя таблицы.

UserInfo *userInfo = [[UserInfo alloc]init];

    sqlite3 *database;
    sqlite3_stmt *selectstmt;
    NSLog(@"userName:%@",userName);
    if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
        NSString *sqlString = [NSString stringWithFormat:@"SELECT USER_LEVEL FROM USER_INFO WHERE USER_NAME = '%@'" , userName];
        NSLog(@"getCurrentUserInfo:%@",sqlString);
        const char *SqlCommand = [sqlString UTF8String];
        if (sqlite3_prepare_v2(database, SqlCommand, -1, &selectstmt, NULL) == SQLITE_OK) {
            NSLog(@"success!");
            while (sqlite3_step(selectstmt) == SQLITE_ROW) {
                NSString *userInfoStr = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 0)];
                NSLog(@"select result:%@",userInfoStr);
            }
        }
      //Add the error message here.
       else
        {

         NSLog(@"%s",sqlite3_errmsg(database));

        }
       ///////
        sqlite3_finalize(selectstmt);
    }
    sqlite3_close (database);
    return userInfo;
0 голосов
/ 06 марта 2012

попробуйте это при преобразовании sqlString в char

const char * SqlCommand = (char *) [sqlString cStringUsingEncoding: NSUTF8StringEncoding];

0 голосов
/ 06 марта 2012

Удалите кавычки внутри '' и используйте точку с запятой в конце строки sqlString.

NSString *sqlString = [NSString stringWithFormat:@"SELECT USER_LEVEL FROM USER_INFO WHERE USER_NAME = %@;" , userName];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...