Прежде всего: если вы открываете базу данных, вы также должны закрыть ее, используя 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];
}