2011-04-01 80 views
0

我想验证用户输入的用户名和密码是否与sqlite数据库一致。如果用户名和密码存在于数据库中,用户不需要登录。但是如果他的用户名和密码不匹配,他需要登录。我已经添加了下面的代码在我的appdelegate第一:从数据库中检索数据时出现问题

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

    databaseName [email protected]"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); 
} 

最初如果数据库存在。如果不是我创造one.Then我从数据库中读取我检查。

然后在我的登录控制器的登录动作我已经添加以下代码:

-(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和密码equaltostring指定的数据库中,如果它等于它应该从数据库中读取。否则它应该注册。但是当我运行我的应用程序我的应用程序加载时,当我输入用户名和密码,然后单击登录按钮应用程序崩溃。 我有上登录操作的警告JourneyAppDelegate可能不响应,readLoginFromDatabase

可能是什么问题

感谢

+0

。可妳告诉控制台屏幕上的错误可能会不响应警告不会产生任何问题 – 2011-04-01 12:40:06

回答

0

如果要删除警告该代码添加到您的JourneyAppDelegate.h

-(void)readLoginFromDatabase; 
1

首先,如果它崩溃,你需要在这里发表崩溃日志太。

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

第三件事 - 如果您确实想使用sqllite存储某些内容,为什么不通过CoreData?

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

相关问题