从数据库检索数据时出现问题

时间:2011-04-01 11:19:56

标签: iphone objective-c sqlite

我正在尝试验证用户使用sqlite数据库输入的用户名和密码。如果用户无需登录,则用户名和密码存在于数据库中。但如果用户名和密码不匹配,则需要登录。我首先在appdelegate中添加了以下代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  

    databaseName =@"journeymapper.db3";
    NSArray *documentsPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDir = [documentsPaths objectAtIndex:0];
    databasePath = [documentsDir stringByAppendingPathComponent:databaseName];
    [self checkAndCreateDatabase];


}
-(void)checkAndCreateDatabase{
    BOOL success;

    NSFileManager *fileManager = [NSFileManager defaultManager];
    success = [fileManager fileExistsAtPath:databasePath];
    if (success) 
        return;
    NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath]stringByAppendingPathComponent:databaseName];
    [fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil];
    [fileManager release];
}

-(void)readLoginFromDatabase{
    sqlite3 *database;

    if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK){

        const char *sqlStatement = "Select Username,Password from UserInformation";
        sqlite3_stmt *compiledStatement;
        if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK){
            NSString *aUserName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)];
            NSString *aPassword = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)];


        }

        sqlite3_finalize(compiledStatement);
    }

    sqlite3_close(database);
}

最初我已检查数据库是否存在。如果我没有创建一个。那么我已从数据库中读取。

然后在我的登录控制器的登录操作中,我添加了以下代码:

-(IBAction)login:(id)sender{
    journey = (JourneyAppDelegate *)[[UIApplication sharedApplication]delegate];
    if ([mUserName.text isEqualToString:@"shardulprabhu"] && [mPassword.text isEqualToString:@"password"]) {
        [journey readLoginFromDatabase];
        NSLog(@"journey read");
    }
    else{
        [self signUp];
    }

}

此代码检查myusername和password是否为equaltostring指定数据库中的那个,如果它是相等的,它应该从database.else读取它应该注册。但是当我运行我的应用程序时我的应用程序加载,当我输入用户名和密码时单击登录按钮应用程序崩溃。 我收到JourneyAppDelegate可能无法响应的登录操作警告-readLoginFromDatabase

可能是什么问题

感谢

2 个答案:

答案 0 :(得分:1)

首先,如果它崩溃了,你也需要在这里发布崩溃日志。

第二件事 - 不要使用sqllite进行用户名/密码存储。请使用钥匙串。

第三件事 - 如果你想使用sqllite来存储东西,为什么不通过CoreData?

关于您的警告 - 您似乎忘了将readLoginFromDatabase方法添加到标头文件中。

答案 1 :(得分:0)

如果要删除警告,请将此代码添加到JourneyAppDelegate.h

-(void)readLoginFromDatabase;