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 , nonatomic) SQLManager *sqlObj ;
2 ) Use In viewcontroller.m :-
// ------- didFinishLaunchingWithOptions Method
[self sqlCheck] ;
if ([self userAlreadyLoggedIn])
{
NSLog(@"Logged in") ;
}
else
{
NSLog(@"Not Logged in") ;
}
#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