YouTip LogoYouTip

Ios Sqlite

iOS SQLite Database


Introduction

Using SQLite to handle data in iOS. If you already understand SQL, you can easily master SQLite database operations.

Steps for the Example

  1. Create a simple View-based application.
  2. Select the project file, then select the target, and add the libsqlite3.dylib library to the Linked Frameworks and Libraries.
  3. Create a new file by selecting File β†’ New β†’ File…, then choose Objective-C class, and click Next.
  4. Set Subclass of to NSObject, and name the class DBManager.
  5. Click Create.
  6. Update DBManager.h, as shown below:
#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
  1. Update DBManager.m, as shown below:
#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];
        ;
    }
    return sharedInstance;
}

- (BOOL)createDB
{
    NSString *docsDir;
    NSArray *dirPaths;
    // Get the documents directory
    dirPaths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
    docsDir = dirPaths;

    // Build the path to the database file
    databasePath = [ initWithString: [docsDir stringByAppendingPathComponent: @"student.db"]];

    BOOL isSuccess = YES;
    NSFileManager *filemgr = ;

    if ([filemgr fileExistsAtPath: databasePath ] == NO)
    {
        const char *dbpath = ;

        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 = ;

    if (sqlite3_open(dbpath, &database) == SQLITE_OK)
    {
        NSString *insertSQL = [NSString stringWithFormat:@"insert into studentsDetail (regno,name, department, year) values ("%d","%@", "%@", "%@")",, name, department, year];
        const char *insert_stmt = ;
        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 = ;

    if (sqlite3_open(dbpath, &database) == SQLITE_OK)
    {
        NSString *querySQL = [NSString stringWithFormat: @"select name, department, year from studentsDetail where regno="%@"",registerNumber];
        const char *query_stmt = ;
        NSMutableArray *resultArray = [init];

        if (sqlite3_prepare_v2(database, query_stmt, -1, &statement, NULL) == SQLITE_OK)
        {
            if (sqlite3_step(statement) == SQLITE_ROW)
            {
                NSString *name = [ initWithUTF8String: (const char *) sqlite3_column_text(statement, 0)];
                [resultArray addObject:name];

                NSString *department = [ initWithUTF8String: (const char *) sqlite3_column_text(statement, 1)];
                [resultArray addObject:department];

                NSString *year = [initWithUTF8String: (const char *) sqlite3_column_text(statement, 2)];
                [resultArray addObject:year];

                return resultArray;
            }
            else
            {
                NSLog(@"Not found");
                return nil;
            }
            sqlite3_reset(statement);
        }
    }
    return nil;
}
  1. Update ViewController.xib as shown in the figure below:

Image 1: Sqlite_Interface

  1. Create IBOutlets for the text fields shown above.
  2. Create IBActions for the buttons shown above.
  3. Update ViewController.h, as shown below:
#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
  1. Update ViewController.m, as shown below:
#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
{
    ;
    // Do any additional setup after loading the view from its nib.
}

- (void)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 = [saveData: regNoTextField.text
                                                    name:nameTextField.text
                                                department: departmentTextField.text
                                                      year:yearTextField.text];
    }
    else
    {
        alertString = @"Enter all fields";
    }

    if (success == NO)
    {
        UIAlertView *alert = [initWithTitle: alertString
                                                       message:nil
                                                         delegate:nil
                                                cancelButtonTitle:@"OK"
                                                otherButtonTitles:nil];
        ;
    }
}

- (IBAction)findData:(id)sender
{
    NSArray *data = [findByRegisterNumber: findByRegisterNumberTextField.text];

    if (data == nil)
    {
        UIAlertView *alert = [initWithTitle: @"Data not found"
                                                       message:nil
                                                         delegate:nil
                                                cancelButtonTitle: @"OK"
                                                otherButtonTitles:nil];
        ;

        regNoTextField.text = @"";
        nameTextField.text = @"";
        departmentTextField.text = @"";
        yearTextField.text = @"";
    }
    else
    {
        reg
← Ios Sending EmailIos Location β†’