Проблема получения более первой строки из БД SQLite - PullRequest
0 голосов
/ 14 апреля 2011

Я создаю приложение, которое сначала проверяет, является ли пользователь действительным или нет, проверяя данные из базы данных SQLite.Я создал таблицу с именем loginchk в базе данных с тремя строками и двумя столбцами в ней, uname и pass.

Когда я запускаю приложение и ввожу значения имени пользователя и пароля в моем текстеполя, он проверяет, есть ли имя пользователя и пароль в базе данных.Если это не так, он будет отображать предупреждение, которое гласит «Пожалуйста, введите правильное имя пользователя».

В моем коде есть проблема: он читает только первую строку, т. Е. Когда я ввожу имя пользователя и парользначения, которые находятся в первой строке, это успешно, и все другие значения, которые я ввожу, не работают.

В чем может быть проблема?

Спасибо.

#import "loginAppDelegate.h"
#import "global.h" 
#import <sqlite3.h>
#import "logincontroller.h" 
@implementation loginAppDelegate 
@synthesize window; 
@synthesize loginView; 
//databaseName=@"login.sqlite";
 -(void) chekAndCreateDatabase 
{   
BOOL success;   
//sqlite3  *databaseName=@"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 
{     
 Gpass=@"";   
Guname=@""; 
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); 
  }   

Это мой логин контроллер;здесь я вызываю функцию делегата моего приложения 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];  
  } 
   } 

Ответы [ 2 ]

0 голосов
/ 14 апреля 2011

Попробуйте это

\-(void) Data 
{     
 Gpass=@"";   
Guname=@""; 
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); 
  }
0 голосов
/ 14 апреля 2011

изменить

if (SQLITE_DONE!= sqlite3_step(detailStmt)) 

с

while  (SQLITE_DONE!= sqlite3_step(detailStmt))

Обновить 1

использовать этот код -

-(void) Data 
{     
    Gpass=@"";   
    Guname=@""; 
    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); 

    }   


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...