Databse Using SQLManager in Swift
Add framework : -
- libsqlite3.tbd
Add NSObject File of Objective C : -
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 ;
-(void)updateDATA : (NSString *)value : (NSString *)key ;
-(void)DeleteData ;
@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:@"ClPanic.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 ;
}
}
-(void)updateDATA : (NSString *)value : (NSString *)key
{
sqlite3_stmt *updateStmt = nil;
if (sqlite3_open([[self documentsPath] UTF8String], &DB) == SQLITE_OK)
{
if (updateStmt == nil)
{
const char *sql = "UPDATE user_data SET value =? where key = ?";
if (sqlite3_prepare_v2(DB, sql, -1, &updateStmt, NULL) != SQLITE_OK)
NSAssert1(0, @"Error while creating add statement. '%s'",sqlite3_errmsg(DB));
}
sqlite3_bind_text(updateStmt, 2, [key UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(updateStmt, 1, [value UTF8String], -1, SQLITE_TRANSIENT);
if (SQLITE_DONE != sqlite3_step(updateStmt))
NSAssert1(0, @"Error while updating data. '%s'", sqlite3_errmsg(DB));
else
{
sqlite3_finalize(updateStmt);
sqlite3_close(DB);
}
}
else
{
sqlite3_finalize(updateStmt);
sqlite3_close(DB);
}
}
-(void)DeleteData
{
sqlite3_stmt *deleteStmnt = nil;
if(sqlite3_open([[self documentsPath] UTF8String],&DB) == SQLITE_OK)
{
if(deleteStmnt == nil)
{
const char *sql = "delete from user_data";
if(sqlite3_prepare_v2(DB, sql, -1, &deleteStmnt, NULL) != SQLITE_OK)
NSAssert1(0, @"Error while creating delete statement. '%s'", sqlite3_errmsg(DB));
}
if (SQLITE_DONE != sqlite3_step(deleteStmnt))
NSAssert1(0, @"Error while deleting. '%s'", sqlite3_errmsg(DB));
else{
sqlite3_finalize(deleteStmnt);
sqlite3_close(DB);
}
}
else{
sqlite3_finalize(deleteStmnt);
sqlite3_close(DB);
}
}
@end
Add PCH file & Import This Class in File :-
#import "SQLManager.h"
Write Coding In Appdelegate : -
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
var SQLManagerData = SQLManager()
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
SQLManagerData.createAndOpenDatabase()
if (userAlreadyLoggedIn()) {
let appdelegate = UIApplication.shared.delegate as! AppDelegate
let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let homeViewController = mainStoryboard.instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController
let nav = UINavigationController(rootViewController: homeViewController)
appdelegate.window!.rootViewController = nav
}
else
{
}
return true
}
func userAlreadyLoggedIn() -> Bool {
let userLoggedIn = SQLManagerData.getAllUserInfo() .value(forKey: "user_logged_in") as? String
if (userLoggedIn == "Yes") {
return true
}
else
{
return false
}
}
Write Coding In ViewController.swift : -
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var name: UITextField!
@IBOutlet weak var Password: UITextField!
var SQLManagerData = SQLManager()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
@IBAction func saveData(_ sender: AnyObject) {
SQLManagerData.createAndOpenDatabase()
SQLManagerData .insertKey(toDatabase: "name", value: name.text)
SQLManagerData .insertKey(toDatabase: "pass", value: Password.text)
SQLManagerData .insertKey(toDatabase: "user_logged_in", value: "Yes")
let secondViewController = self.storyboard?.instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController
self.navigationController?.pushViewController(secondViewController, animated: true)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
Write Coding In SecondViewController.swift : -
import UIKit
class SecondViewController: UIViewController {
var SQLManagerData = SQLManager()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
@IBAction func Logout(_ sender: AnyObject) {
SQLManagerData.createAndOpenDatabase()
SQLManagerData .insertKey(toDatabase: "name", value: "")
SQLManagerData .insertKey(toDatabase: "pass", value: "")
SQLManagerData .insertKey(toDatabase: "user_logged_in", value: "No")
let secondViewController = self.storyboard?.instantiateViewController(withIdentifier: "ViewController") as! ViewController
self.navigationController?.pushViewController(secondViewController, animated: true)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
}
*/
}

No comments:
Post a Comment