Saturday, 3 October 2015

Database (Programatically Create DB)

Database ( Programatically Create DB )


SQLManager.h : -

#import <Foundation/Foundation.h>
#import "sqlite3.h"

@interface SQLManager : NSObject
{
    char *errorDB ;
}

@property (assign , nonatomic) sqlite3 *DB ;

/* Open DB And Create table if not exist  */

-(void)createAndOpenDatabase ;

/* Get All User Info Details */

-(NSMutableDictionary *)getAllUserInfo ;

/* Insert User Data to "user_data" Table */

-(BOOL)insertKeyToDatabase:(NSString *)key value:(NSString *)value ;
-(BOOL)updateKeyToDatabase:(NSString *)key value:(NSString *)value ;


@end

SQLManager.m : -

#import "SQLManager.h"


@implementation SQLManager

@synthesize DB ;

#pragma mark - Database Methods

-(void)createAndOpenDatabase
{
    //NSLog(@"called") ;
    
    [self openDB];
    [self createTable] ;
}

-(NSString *)documentsPath
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentDir = [paths objectAtIndex:0];
    NSLog(@"%@",paths);
    return [documentDir stringByAppendingPathComponent:@"Database.sqlite"];
}

-(void)openDB
{
    if (sqlite3_open([[self documentsPath]UTF8String],&DB) == SQLITE_OK)
    {
        // NSLog(@"database opened");
    }
    else
    {
        sqlite3_close(DB);
        NSAssert(0, @"database failed to open");
    }
}

-(void) createTable
{
    // Table - [ User Data Table ]
    
    NSString *tableName = @"user_data";
    NSString *field1 = @"id";
    NSString *field2 = @"key";
    NSString *field3 = @"value";
    
    NSString *sql_stat = [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS '%@' ('%@' " "INTEGER PRIMARY KEY AUTOINCREMENT, '%@' TEXT,'%@' TEXT);",tableName, field1, field2,field3];
    
    if (sqlite3_exec(DB, [sql_stat UTF8String], NULL, NULL, &errorDB) == SQLITE_OK &&
        sqlite3_exec(DB, [sql_stat UTF8String], NULL, NULL, &errorDB) == SQLITE_OK)
    {
        // NSLog(@"Table1 Created");
    }
    else
    {
        sqlite3_close(DB);
        NSAssert(0, @"Tabled failed to create.");
    }
}

#pragma mark - Get Data from DB

-(NSMutableDictionary *)getAllUserInfo
{
    NSMutableDictionary *userInfoDict = [[NSMutableDictionary alloc] init] ;
    
    NSMutableArray *keyArray = [[NSMutableArray alloc] init];
    NSMutableArray *valueArray = [[NSMutableArray alloc] init];
    
    NSString *display = [NSString stringWithFormat:@"SELECT * FROM user_data"];
    
    sqlite3_stmt *statement ;
    
    if (sqlite3_prepare_v2(DB, [display UTF8String], -1, &statement, nil) == SQLITE_OK)
    {
        while (sqlite3_step(statement) == SQLITE_ROW)
        {
            char *field = (char *) sqlite3_column_text(statement, 1);
            NSString *fieldStr = [[NSString alloc] initWithUTF8String:field];
            
            char *field2 = (char *) sqlite3_column_text(statement, 2);
            NSString *fieldStr2 = [[NSString alloc] initWithUTF8String:field2];
            
            [keyArray addObject:fieldStr] ;
            [valueArray addObject:fieldStr2] ;
        }
    }
    
    for (int i = 0 ; i < keyArray.count ; i++)
    {
        [userInfoDict setValue:[valueArray objectAtIndex:i] forKey:[keyArray objectAtIndex:i]] ;
    }
    
    return userInfoDict ;
}

#pragma mark - Insert User Data to table

-(BOOL)insertKeyToDatabase:(NSString *)key value:(NSString *)value
{
    NSString *insertTag = [NSString stringWithFormat:@"INSERT INTO user_data ('key','value') VALUES ('%@','%@')", key , value];
    
    if (sqlite3_exec(DB, [insertTag UTF8String], NULL, NULL, &errorDB) == SQLITE_OK)
    {
        return YES ;
    }
    else
    {
        return NO ;
    }
}
-(BOOL)updateKeyToDatabase:(NSString *)key value:(NSString *)value
{
           NSString *updateTag = [NSString stringWithFormat:@"INSERT OR REPLACE INTO user_data  ('key','value') VALUES ('%@','%@')", key , value];
    
    if (sqlite3_exec(DB, [updateTag UTF8String], NULL, NULL, &errorDB) == SQLITE_OK)
    {
        return YES ;
    }
    else
    {
        return NO ;
    }
}

@end


//------------------------------------------------

Check Status For Login :


1 ) Import In Appdelegate.h :-

#import "SQLManager.h"

//------------assign property--------------//

//-------- SqlManager Obj -------//

@property (strong , nonatomicSQLManager *sqlObj ;

2 ) Use In viewcontroller.m :-

// ------- didFinishLaunchingWithOptions Method

      [self sqlCheck] ;

     
    if ([self userAlreadyLoggedIn])
    {

        NSLog(@"Logged in") ;
   
    }
    else
    {

        NSLog(@"Not Logged in") ;
      

    }

// ------- Create Method

#pragma mark - Create Local Sqlite

-(void)sqlCheck
{
    _sqlObject = [[SQLManager alloc] init] ;
    [_sqlObject createAndOpenDatabase] ;
}

#pragma mark - Check User Log in Status

-(BOOL)userAlreadyLoggedIn
{
    NSString *userLoggedIn = [[_sqlObject getAllUserInfo] valueForKey:@"user_logged_in"] ;
    
    if ([userLoggedIn isEqualToString:@"yes"])
    {
        return YES ;
    }
    else
    {
        return NO ;
    }

}

//------------------------------------------------
Use Of Database In ViewController :

1 ) Import In viewcontroller.h :-

#import "SQLManager.h"

//------------assign property--------------//

//-------- SqlManager Obj -------//

@property (strong , nonatomic) SQLManager *sqlObj ;

2 ) Use In viewcontroller.m :-

 // ---------- Initialize SqlObject
    
    _sqlObj = [[SQLManager alloc] init] ;


 //------- Open Sql DB
    
    [_sqlObj createAndOpenDatabase] ;


//---------- Insert data by key


   ex. -  [_sqlObj insertKeyToDatabase:@"user_logged_in" value:@"yes"];
              [_sqlObj insertKeyToDatabase:@"name" value:txtname.text];
              [_sqlObj insertKeyToDatabase:@"add" value:txtadd.text];
   

   
//---------- Get data by key

ex. -  [_sqlObj getAllUserInfo] valueForKey:@""];


No comments:

Post a Comment