Base de données IOS SQLite


Base de données IOS SQLite


Introduction

Utilisez SQLite dans IOS pour traiter les données. Si vous connaissez déjà SQL, vous pouvez facilement maîtriser le fonctionnement de la base de données SQLite.

Étapes de l'instance

1. Créez une application simple basée sur View

2. Sélectionnez le fichier du projet, puis sélectionnez la cible, ajoutez la bibliothèque libsqlite3.dylib au framework sélectionné

3. -> Fichier... -> "Sélectionnez la classe Objective C pour créer un nouveau fichier, cliquez sur Suivant

4. La "sous-classe de" est NSObject", et la classe est nommée DBManager

5. 6. Mettez à jour DBManager.h, comme indiqué ci-dessous

#import <Foundation/Foundation.h>#import <sqlite3.h>@interface DBManager : NSObject{    NSString *databasePath;}+(DBManager*)getSharedInstance;-(BOOL)createDB;-(BOOL) saveData:(NSString*)registerNumber name:(NSString*)name 
  department:(NSString*)department year:(NSString*)year;-(NSArray*) findByRegisterNumber:(NSString*)registerNumber;@end

7. Mettez à jour DBManager.m comme indiqué ci-dessous

#import "DBManager.h"static DBManager *sharedInstance = nil;static sqlite3 *database = nil;static sqlite3_stmt *statement = nil;@implementation DBManager+(DBManager*)getSharedInstance{    if (!sharedInstance) {
        sharedInstance = [[super allocWithZone:NULL]init];        [sharedInstance createDB];    }    return sharedInstance;}-(BOOL)createDB{    NSString *docsDir;    NSArray *dirPaths;    
    // Get the documents directory
    dirPaths = NSSearchPathForDirectoriesInDomains    (NSDocumentDirectory, NSUserDomainMask, YES);    
    docsDir = dirPaths[0];    // Build the path to the database file
    databasePath = [[NSString alloc] initWithString: 
    [docsDir stringByAppendingPathComponent: @"student.db"]];
    BOOL isSuccess = YES;    NSFileManager *filemgr = [NSFileManager defaultManager];    
    if ([filemgr fileExistsAtPath: databasePath ] == NO)    {        const char *dbpath = [databasePath UTF8String];        
        if (sqlite3_open(dbpath, &database) == SQLITE_OK)        {            char *errMsg;            const char *sql_stmt =            "create table if not exists studentsDetail (regno integer 
            primary key, name text, department text, year text)";            
            if (sqlite3_exec(database, sql_stmt, NULL, NULL, &errMsg) 
               != SQLITE_OK)            {
                isSuccess = NO;                NSLog(@"Failed to create table");            }
            sqlite3_close(database);            return  isSuccess;        }        else {
            isSuccess = NO;            NSLog(@"Failed to open/create database");        }    }    
    return isSuccess;}- (BOOL) saveData:(NSString*)registerNumber name:(NSString*)name 
  department:(NSString*)department year:(NSString*)year;{    const char *dbpath = [databasePath UTF8String];    
    if (sqlite3_open(dbpath, &database) == SQLITE_OK)    {        
        NSString *insertSQL = [NSString stringWithFormat:@"insert into
        studentsDetail (regno,name, department, year) values
        (\"%d\",\"%@\", \"%@\", \"%@\")",[registerNumber integerValue],
        name, department, year];        
        const char *insert_stmt = [insertSQL UTF8String];
        sqlite3_prepare_v2(database, insert_stmt,-1, &statement, NULL);        if (sqlite3_step(statement) == SQLITE_DONE)        {            return YES;        } 
        else {            return NO;        }
        sqlite3_reset(statement);    }    return NO;}- (NSArray*) findByRegisterNumber:(NSString*)registerNumber{    const char *dbpath = [databasePath UTF8String];    
    if (sqlite3_open(dbpath, &database) == SQLITE_OK)    {        NSString *querySQL = [NSString stringWithFormat:        @"select name, department, year from studentsDetail where 
        regno=\"%@\"",registerNumber];        
        const char *query_stmt = [querySQL UTF8String];        NSMutableArray *resultArray = [[NSMutableArray alloc]init];        if (sqlite3_prepare_v2(database,
           query_stmt, -1, &statement, NULL) == SQLITE_OK)        {            if (sqlite3_step(statement) == SQLITE_ROW)            {                
                NSString *name = [[NSString alloc] initWithUTF8String:                 (const char *) sqlite3_column_text(statement, 0)];                [resultArray addObject:name];                NSString *department = [[NSString alloc] initWithUTF8String:                (const char *) sqlite3_column_text(statement, 1)];                [resultArray addObject:department];                NSString *year = [[NSString alloc]initWithUTF8String:                (const char *) sqlite3_column_text(statement, 2)];                [resultArray addObject:year];                return resultArray;            }            else{                NSLog(@"Not found");                return nil;            }
            sqlite3_reset(statement);        }    }    return nil;}

8 Mettez à jour le fichier ViewController.xib comme indiqué dans l'image

Sqlite_Interface9. champ de texte

10. Créez IBAction pour le bouton ci-dessus

11. Mettez à jour ViewController.h comme indiqué ci-dessous

#import <UIKit/UIKit.h>#import "DBManager.h"@interface ViewController : UIViewController<UITextFieldDelegate>{    IBOutlet UITextField *regNoTextField;    IBOutlet UITextField *nameTextField;    IBOutlet UITextField *departmentTextField;    IBOutlet UITextField *yearTextField;    IBOutlet UITextField *findByRegisterNumberTextField;    IBOutlet UIScrollView *myScrollView;}-(IBAction)saveData:(id)sender;-(IBAction)findData:(id)sender;@end

12. Mettez à jour ViewController.m comme indiqué ci-dessous

#import "ViewController.h"@interface ViewController ()@end@implementation ViewController- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)
  nibBundleOrNil{    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];    if (self) {        // Custom initialization    }    return self;}- (void)viewDidLoad{    [super viewDidLoad];    // Do any additional setup after loading the view from its nib.}- (void)didReceiveMemoryWarning{    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}-(IBAction)saveData:(id)sender{
    BOOL success = NO;    NSString *alertString = @"Data Insertion failed";    if (regNoTextField.text.length>0 &&nameTextField.text.length>0 &&
    departmentTextField.text.length>0 &&yearTextField.text.length>0 )    {
        success = [[DBManager getSharedInstance]saveData:
        regNoTextField.text name:nameTextField.text department:
        departmentTextField.text year:yearTextField.text];    }    else{
        alertString = @"Enter all fields";    }     
    if (success == NO) {        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:
        alertString message:nil        delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];        [alert show];    }}-(IBAction)findData:(id)sender{    NSArray *data = [[DBManager getSharedInstance]findByRegisterNumber:
    findByRegisterNumberTextField.text];    if (data == nil) {        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:        @"Data not found" message:nil delegate:nil cancelButtonTitle:        @"OK" otherButtonTitles:nil];        [alert show];
        regNoTextField.text = @"";
        nameTextField.text =@"";
        departmentTextField.text = @"";
        yearTextField.text =@"";    }    else{
        regNoTextField.text = findByRegisterNumberTextField.text;
        nameTextField.text =[data objectAtIndex:0];
        departmentTextField.text = [data objectAtIndex:1];
        yearTextField.text =[data objectAtIndex:2];    }}#pragma mark - Text field delegate-(void)textFieldDidBeginEditing:(UITextField *)textField{    [myScrollView setFrame:CGRectMake(10, 50, 300, 200)];    [myScrollView setContentSize:CGSizeMake(300, 350)];}-(void)textFieldDidEndEditing:(UITextField *)textField{    [myScrollView setFrame:CGRectMake(10, 50, 300, 350)];}-(BOOL) textFieldShouldReturn:(UITextField *)textField{    
    [textField resignFirstResponder];    return YES;}@end

Output

Maintenant, lorsque nous exécuterons l'application, nous obtiendrons la sortie suivante où nous pouvons ajouter et trouver les détails des étudiants

Sqlite_Output