2011-04-14 3 views
0

Je crée une application qui vérifie d'abord si l'utilisateur est valide ou non en vérifiant les données d'une base de données SQLite. J'ai créé une table nommée loginchk dans la base de données avec trois lignes et deux colonnes, uname et pass.Problème lors de la récupération de la première ligne de SQLite DB

Lorsque j'exécute l'application et que j'entre les valeurs de nom d'utilisateur et de mot de passe dans mes champs de texte, elle vérifie si le nom d'utilisateur et le mot de passe se trouvent dans la base de données. Si ce n'est pas le cas, il affichera une vue d'alerte indiquant "Veuillez entrer le nom d'utilisateur correct".

Mon code présente un problème: il lit uniquement la première ligne, c'est-à-dire lorsque j'entre les valeurs de nom d'utilisateur et de mot de passe de la première ligne et toutes les autres valeurs que je sais ne fonctionnent pas.

Quel pourrait être le problème?

Merci.

#import "loginAppDelegate.h" 
#import "global.h" 
#import <sqlite3.h> 
#import "logincontroller.h" 
@implementation loginAppDelegate 
@synthesize window; 
@synthesize loginView; 
//[email protected]"login.sqlite"; 
-(void) chekAndCreateDatabase 
{ 
BOOL success; 
//sqlite3 *[email protected]"login.sqlite"; 
NSFileManager *fileManager=[NSFileManager defaultManager]; 
NSArray *documentPaths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDir =[documentPaths objectAtIndex:0]; 
NSString *databasePath=[documentsDir stringByAppendingPathComponent"login.sqlite"]; success=[fileManager fileExistsAtPathatabasePath]; 
if(success)return;  
NSString *databasePathFromApp=[[[NSBundle mainBundle]resourcePath]stringByAppendingPathComponent"login.sqlite"]; 
     [fileManager copyItemAtPathatabasePathFromApp toPathatabasePath error:nil]; [fileManager release]; 
} 

-(void) Data 
{  
[email protected]""; 
[email protected]""; 
sqlite3_stmt *detailStmt=nil;  
//sqlite3 *databaseName;  
NSArray *documentPaths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDir =[documentPaths objectAtIndex:0]; 
NSString *databasePath=[documentsDir stringByAppendingPathComponent{angry_smile}"login.sqlite"]; 
[self chekAndCreateDatabase]; 
     sqlite3 *database; 
if (sqlite3_open([databasePath UTF8String],&database)==SQLITE_OK) 
{  
    if (detailStmt==nil) 
    {  
     const char *sql= "select *from Loginchk"; //where uname='%?'and password='%?'";  //NSString *sql = [[NSString alloc] initWithFormat{angry_smile}"SELECT * FROM Loginchk WHERE uname ='%@' and password ='%@' ",Uname.text,Password.text];  
if (sqlite3_prepare_v2(database,sql,-1,&detailStmt,NULL)==SQLITE_OK) 
{         
     sqlite3_bind_text(detailStmt,1,[Gunameq UTF8String],-1,SQLITE_TRANSIENT); 
        sqlite3_bind_text(detailStmt,2,[Gpassq UTF8String],-1,SQLITE_TRANSIENT);     
if (SQLITE_DONE!= sqlite3_step(detailStmt)) 


{      
    Guname=[NSString stringWithUTF8Stringchar*)sqlite3_column_text(detailStmt,0)];   

Gpass =[NSString stringWithUTF8Stringchar*)sqlite3_column_text(detailStmt,1)];      

NSLog(@"'%@'",Guname);   
    NSLog(@"'%@'",Gpass);   }  
    }  sqlite3_finalize(detailStmt);  
} 
} sqlite3_close(database); 
    } 

Ceci est mon contrôleur de connexion; ici j'appelle ma fonction de délégué de l'application data:

-(IBAction)buttonPressed:(id)sender 
{  
Gpassq=Password.text; 
    Gunameq=Uname.text; 
     NSLog(@"%@%@",Gunameq,Gpassq); 
    loginAppDelegate *appDelegate =(loginAppDelegate *)[[UIApplication sharedApplication]delegate]; 
[appDelegate Data]; 
    if ([Uname.text isEqualToString:Guname]&&[Password.text isEqualToString:Gpass]) 
{   
UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"UIAlertView" message:@"Success" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
    [alert show]; 
    [alert release]; 
    }  
    else 
{ 
    UIAlertView *alert =[[UIAlertView alloc]initWithTitle:@"UIAlertView" message:@"PleaseEnterCorrectUserName and password" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
[alert show];  
[alert release]; 
    } 
    } 

Répondre

0

changement

if (SQLITE_DONE!= sqlite3_step(detailStmt)) 

avec

while (SQLITE_DONE!= sqlite3_step(detailStmt)) 

Update 1

utilisation de ce code -

-(void) Data 
{  
    [email protected]""; 
    [email protected]""; 
    sqlite3_stmt *detailStmt=nil;  
    //sqlite3 *databaseName;  
    NSArray *documentPaths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDir =[documentPaths objectAtIndex:0]; 
    NSString *databasePath=[documentsDir stringByAppendingPathComponent:@"login.sqlite"]; 
    [self chekAndCreateDatabase]; 


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

     const char *sql= "select *from Loginchk"; //where uname='%?'and password='%?'";  //NSString *sql = [[NSString alloc] initWithFormat{angry_smile}"SELECT * FROM Loginchk WHERE uname ='%@' and password ='%@' ",Uname.text,Password.text];  
     sqlite3_stmt *detailStmt; 
     if (sqlite3_prepare_v2(database,sql,-1,&detailStmt,NULL)==SQLITE_OK) 
     {         
      while(sqlite3_step(detailStmt) == SQLITE_ROW) 
      { 

       Guname=[NSString stringWithUTF8String:(char *)sqlite3_column_text(detailStmt,0)];   
       Gpass =[NSString stringWithUTF8String:(char *)sqlite3_column_text(detailStmt,1)];      

       NSLog(@"'%@'",Guname);   
       NSLog(@"'%@'",Gpass);   

      }  

     } 

     sqlite3_finalize(detailStmt);  
     sqlite3_close(database); 

    } 


} 
+0

enlever le cas et ajouter tout pas vérifie ma condition qu'il se directement dans la partie else – Rani

+0

êtes-vous sûr que vous avez plusieurs lignes dans la base de données .. imprimer le chemin de la base de données et ouvert en utilisant un client sqlite et vérifiez la table .. – Saurabh

+0

Je ne peux pas croire que cela ne fonctionne pas .. J'ai testé ce code !!! vous devez avoir un autre problème! – Saurabh

0

Essayez cette

\-(void) Data 
{  
[email protected]""; 
[email protected]""; 
sqlite3_stmt *detailStmt=nil;  
//sqlite3 *databaseName;  
NSArray *documentPaths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDir =[documentPaths objectAtIndex:0]; 
NSString *databasePath=[documentsDir stringByAppendingPathComponent{angry_smile}"login.sqlite"]; 
[self chekAndCreateDatabase]; 
     sqlite3 *database; 
if (sqlite3_open([databasePath UTF8String],&database)==SQLITE_OK) 
{  
    if (detailStmt==nil) 
    {  
     const char *sql= "select *from Loginchk"; //where uname='%?'and password='%?'";  //NSString *sql = [[NSString alloc] initWithFormat{angry_smile}"SELECT * FROM Loginchk WHERE uname ='%@' and password ='%@' ",Uname.text,Password.text];  
if (sqlite3_prepare_v2(database,sql,-1,&detailStmt,NULL)==SQLITE_OK) 
{         
     sqlite3_bind_text(detailStmt,1,[Gunameq UTF8String],-1,SQLITE_TRANSIENT); 
        sqlite3_bind_text(detailStmt,2,[Gpassq UTF8String],-1,SQLITE_TRANSIENT);     
// Loop through the results 
      while(sqlite3_step(detailStmt) == SQLITE_ROW) { 


{      
    Guname=[NSString stringWithUTF8Stringchar*)sqlite3_column_text(detailStmt,0)];   

Gpass =[NSString stringWithUTF8Stringchar*)sqlite3_column_text(detailStmt,1)];      

NSLog(@"'%@'",Guname);   
    NSLog(@"'%@'",Gpass);   }  
    }  sqlite3_finalize(detailStmt);  
} 
} sqlite3_close(database); 
    } 
Questions connexes