2011-04-01 31 views
0

我想在我的应用程序中创建登录页面。对于我使用的SQLite数据库(journeymapper.db3它是数据库名),其中有UserInformation表 对于使用打鸟代码:创建登录页面与撤消数据到sqlite3

-(void)checkindatabase 
{ 
NSString *direct = [[NSString alloc]init] ; 
NSString *dbPath = [direct stringByAppendingPathComponent:@"journeymapper.db3"]; 


if(sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) 
{ 
    NSLog(@"open"); 
    NSString *sql = [[NSString alloc] initWithFormat:@"select Username='%@',Password='%@' from UserInformation",txtuser.text,txtpass.text]; 
    //[sql UTF8String]; 
     //NSLog(@"'%s'",[sql UTF8String]); 
    sqlite3_stmt *statment; 
    if(sqlite3_prepare_v2(database, [sql UTF8String], -1, &statment, NULL) == SQLITE_OK) 
    { 
     if(sqlite3_step(statment) == SQLITE_ROW) 
     { 

      UIAlertView* alert = [[UIAlertView alloc] initWithTitle:nil 
                message:@"Welcome to joureny" delegate:nil 
                cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
      [alert show]; 
      [alert release]; 
     } 


    } 


    sqlite3_finalize(statment); 

} 
sqlite3_close(database); 
} 

-(IBAction)login 
{ 
    [self checkindatabase]; 
} 

我输入正确的用户名密码&,但它不告诉我alertview我如何实现这一点。请帮助我了解如何创建登录页面。

+1

我觉得DBPATH应包含数据库不仅名称的完整路径。尝试调试你的数据库打开成功。 – Iducool 2011-04-01 12:21:12

回答

2

可能是你的任务2的错误。检查DBPATH和查询

1.

NSArray *dirPath =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *docDir =[dirPath objectAtIndex:0]; 
    NSString *databasePath =[[NSString alloc] initWithString:[docDir stringByAppendingPathComponent:@"dbname.db"]]; 

2.

改变你的查询作为

NSString *sql = [[NSString alloc] initWithFormat:@"select * from UserInformation where Username='%@' and Password='%@'",txtuser.text,txtpass.text]; 

如果返回一些东西......你的用户名和密码是正确的。或者否则其中一个文本是正确的

编辑Answe [R

//To check open DB or not 
if(open DB) 
    //ur code 
else 
    NSLog(@"open fails & error is ::%s",sqlite3_errmsg(contactDB)); 

// To validate Password  

if (sqlite3_prepare_v2(contactDB, [sql UTF8String], -1, &statement, NULL) == SQLITE_OK) 
    { if(sqlite3_step(statement) == SQLITE_ROW) 
      { 
     //user name is correct 
     //if u want to print in log use below code 
     NSString *username=[[NSString alloc] initWithUTF8String:(const char *)  sqlite3_column_text(statement,0)]; 
     NSString *password = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement,1)]; 

      } 
     else  
     // Authentication failed 
    } 

最好的问候,

+0

它不工作。可以请你发送示例代码来解决这个问题吗? – Harish 2011-04-05 06:36:42

+0

在你的代码中,每一件事情都是可以的。你试图在你的Sqlite数据库(journeymapper.db3)打开成功后打印**打开**日志值。它是否可以工作 – 2011-04-05 10:03:37

+0

它数据库成功打开,但是如果在这种情况下继续(sqlite3_prepare_v2 (sqlite3_step(statment)== SQLITE_ROW){ 这个数据库,[sql UTF8String], - 1,&statment,NULL)== SQLITE_OK)这个它会直接从循环中跳出来,它不会检查\t \t \t if条件,我有我的UIAlertView//当用户权限用户名和密码} – Harish 2011-04-05 10:21:25

0

使用此我认为这将是对你有帮助。

databasePath = [[NSBundle mainBundle]pathForResource:@"ApplicationData" ofType:@"db"]; 
const char *dbpath = [databasePath UTF8String]; 
if (sqlite3_open(dbpath, &adddata) == SQLITE_OK) 
{ 
    NSLog(@"open"); 


    NSString *querySQL = [NSString stringWithFormat: @"SELECT * FROM login WHERE username=\"%@\" and password=\"%@\"",userNameText.text,passWordText.text]; 
    NSLog(@"%@",querySQL); 

    const char *query_stmt = [querySQL UTF8String]; 
    sqlite3_stmt *statement; 

    int c=sqlite3_prepare_v2(adddata, query_stmt, -1, &statement, NULL); 
    NSLog(@"%d",c); 
    if (sqlite3_prepare_v2(adddata, query_stmt, -1, &statement, NULL)==SQLITE_OK) 
    { 
     if(sqlite3_step(statement)==SQLITE_ROW) 
     { 


      NewViewController *contacts=[[NewViewController alloc]initWithNibName:@"NewViewController" bundle:nil]; 
      [self presentModalViewController:contacts animated:YES]; 
    } 

    else 
     { 
      alert=[[UIAlertView alloc]initWithTitle:@"alert" message:@"Incorrect username & password" delegate:self cancelButtonTitle:@"cancel" otherButtonTitles:@"ok", nil]; 
      [alert show]; 

      [email protected]""; 
      [email protected]""; 
     } 
    } 

    sqlite3_close(adddata);  
} 

和.h文件中还可以使用此

#import "/usr/include/sqlite3.h" 
sqlite3 *adddata; 
NSString *databasePath; 
相关问题