проблема со страницей входа в iphone - PullRequest
0 голосов
/ 06 апреля 2011

У меня та же проблема, одна из стековых потоков:

if(sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK)
{
    //const char *sql ="select Username@'%@',Password@'%@' from userinformation";
    NSString *sql = [[NSString alloc] initWithFormat:@"select * from UserInformation where UserName='%@' and Password='%@' ",Username.text,Password.text];
    sqlite3_stmt *selectSatement;

    // Here i am getting the problem.Im not sure why sqlite3_prepare_v2 ins't meeting SQLITE_OK 
    if( sqlite3_prepare_v2(database, [sql UTF8String], -1, &selectSatement, NULL) == SQLITE_OK)
    {
        //-------------------------------------
        //Loop all the 
        NSString *user1 = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectSatement, 0)];
        NSLog(@"%@",user1);
    }
}

Любая помощь с этим очень ценится.

Ответы [ 2 ]

0 голосов
/ 06 апреля 2011

Прежде всего: если вы открываете базу данных, вы также должны закрыть ее, используя sqlite3_close (database)

Я написал в коде ниже оператор assert, который скажет вам, если что-то не так с вашим запросом. В дальнейшем вы можете получить сообщение об ошибке, если ваш пароль или имя пользователя по какой-то причине «ноль», поэтому я немного изменил способ установки имени пользователя и пароля. Если значение не существует, его "0"

if(sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK)
{
    char *errorMsg;

    NSString *sql = [[NSString alloc] initWithFormat: @"SELECT * FROM UserInformation WHERE UserName=\"%@\" and Password =\"%@\"", Username.text, Password.text];
    if (sqlite3_exec (database, [sql UTF8String], NULL, NULL, &errorMsg) != SQLITE_OK)
    {
        sqlite3_close(database);
        NSAssert1(0, @"Error selecting data: %s", sqlite3_errmsg(database));
    }
    else
    {
        NSString *user1 = [NSString stringWithUTF8String:((char *)sqlite3_column_text(compiledStatement, 0) ? (char *)sqlite3_column_text(compiledStatement, 0) : (char *)"0")];
        NSString *password1 = [NSString stringWithUTF8String:((char *)sqlite3_column_text(compiledStatement, 1) ? (char *)sqlite3_column_text(compiledStatement, 1) : (char *)"0")];
        NSLog(@"%@: %@",user1,password1);
    }
    [sql release];
}
sqlite3_close(database);

Следует также иметь в виду, что база данных должна существовать по намеченному пути, вызывая, например, следующий метод

-(void) checkAndCreateDatabase
{
    NSFileManager *fileManager = [NSFileManager defaultManager];
    if([fileManager fileExistsAtPath:dbPath]) return;
    NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:databaseName];
    [fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil];
    [fileManager release];
}
0 голосов
/ 06 апреля 2011

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

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