2011-04-14 176 views
1

如何保留登錄表中的所有行?我只能保留一行,爲什麼不是其他人呢?我使用錯誤的查詢嗎?請檢查我的代碼:iphone中的sqlite數據庫

#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 fileExistsAtPath:databasePath]; 
    if(success)return; 

    NSString *databasePathFromApp=[[[NSBundle mainBundle]resourcePath]stringByAppendingPathComponent:@"login.sqlite"]; 

    [fileManager copyItemAtPath:databasePathFromApp toPath:databasePath 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:@"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:@"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 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

@ user692277:請編輯您的問題,這是很難理解你意思。請使用標點符號('.',',',...),並且更清楚您的代碼在做什麼以及您希望它做什麼。 – Mat 2011-04-14 09:32:23

+0

您的意思是從Loginchk表中獲取所有行而不是一行? – 2011-04-14 09:38:08

+0

我需要從loginchk表中的所有行,也從用戶輸入的文本驗證 – user692277 2011-04-14 10:07:54

回答

0
//Declare Class as Following to store user details UserDetails.h 

@interface UserDetails : NSObject 
{ 
    NSString *strUserName; 
    NSString *strPassword; 
} 
@property (nonatomic,assign) NSString * strUserName; 
@property (nonatomic,retain) NSString * strPassword; 

//Declare Class as Following to store user details UserDetails.m 
@implementation UserDetails 
@synthesize strUserName,strPassword; 
-(void)dealloc 
{ 
    [super dealloc]; 
    [strUserName release]; 
    [strPassword release]; 
} 

//Declare Class as Following to store user details Your ApplicationDelegate.m file 
-(NSMutableArray)getAllUserDetails 
{ 
    sqlite3_stmt *selectStmt = nil; 
    NSArray *documentPaths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDir =[documentPaths objectAtIndex:0]; 
    NSString *databasePath=[documentsDir stringByAppendingPathComponent:@"login.sqlite"]; 
    [self chekAndCreateDatabase]; 

    NSMutableArray *arrUsers = [[NSMutableArray alloc] init]; 
    const char *sqlStatement = "your query"; 

if(sqlite3_prepare_v2(database, sqlStatement, -1, &selectStmt, NULL) == SQLITE_OK) 
{ 
    // Loop through the results and add them to the feeds array 
    while(sqlite3_step(selectStmt) == SQLITE_ROW) 
    { 
     UserDetails *objUserDetail = [[UserDetails alloc] init]; 
     objUserDetail.userName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectStmt, 1)]; 
     objUserDetail.password = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectStmt, 2)]; 
     [arrUsers addObject:objUserDetail]; 
     [objUserDetail release]; 
    } 
} 
// Release the compiled statement from memory 
sqlite3_finalize(selectStmt); 
selectStmt = nil; 

}

調用這個函數在按鈕單擊事件作爲

-(IBAction)btnLogin 
{ 
    BOOL isUserExists = NO; 
    NSMutableArray *arrAllUsers = [loginAppDelegate getAllUserDetails]; 
    //Normal Checking Stuff 
    for(UserDetails *objUser in arrAllUsers) 
    { 
     if([txtUserTextBox.text isEqualToString:objUser.strUserName] && [txtPasswordTextBox.text isEqualToString:objUser.strPassword]) 
     { 
      //True Login 
      isUserExists = YES; 
      break; 
     } 
    } 

    //Check your stuff if user exists or not what to do 
    if(isUserExists) 
    { 
     Heading to next screen; 
    } 
    else 
    { 
     Alertmessage 
    } 
} 
+0

沒有朋友它不工作可以給你樣品請 – user692277 2011-04-14 10:42:34

+0

嗨朋友你可以幫我在這 – user692277 2011-04-14 11:21:13

+0

嗨朋友我嘗試,但我有一個問題,我有刪除畝appdeleget代碼,並創建一個其他類,如果它然後它不工作 – user692277 2011-04-14 12:41:34