SQLite Project Swift5 iOS

 Why SQLite?

SQLite is used to develop embedded software for devices like televisions, cell phones, cameras, etc. It can manage low to medium-traffic HTTP requests. SQLite can change files into smaller size archives with lesser metadata. SQLite is used as a temporary dataset to get processed with some data within an application.


download code from here:

https://gitlab.com/hiren_syl/sqlite-app



code:-

    var db : OpaquePointer?
    var path : String = "myDataBaseName.sqlite"
    init() {
        self.db = createDB()
        self.createTable()
    }
    
    func createDB() -> OpaquePointer? {
        let filePath = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).appendingPathExtension(path)
        
        var db : OpaquePointer? = nil
        
        if sqlite3_open(filePath.path, &db) != SQLITE_OK {
            print("There is error in creating DB")
            return nil
        }else {
            print("Database has been created with path \(path)")
            return db
        }
    }
    func createTable()  {
        let query = "CREATE TABLE IF NOT EXISTS your_table_name(id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT, result TEXT, avg INTEGER, list TEXT);"
        var statement : OpaquePointer? = nil
        
        if sqlite3_prepare_v2(self.db, query, -1, &statement, nil) == SQLITE_OK {
            if sqlite3_step(statement) == SQLITE_DONE {
                print("Table creation success")
            }else {
                print("Table creation fail")
            }
        } else {
            print("Prepration fail")
        }
    }
func insert(name : String, result : String, avg : Int, list : [Grade]) {
        let query = "INSERT INTO your_table_name (id, name, result, avg, list) VALUES (?, ?, ?, ?, ?);"
        
        var statement : OpaquePointer? = nil
        
        var isEmpty = false
        if read(avg: avg).isEmpty {
            isEmpty = true
        }
        
        if sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK{
            if isEmpty {
             sqlite3_bind_int(statement, 1, 1)
            }
            sqlite3_bind_text(statement, 2, (name as NSString).utf8String, -1, nil)
            sqlite3_bind_text(statement, 3, (result as NSString).utf8String, -1, nil)
            sqlite3_bind_int(statement, 4, Int32(avg))
            
            let data = try! JSONEncoder().encode(list)
            let listString = String(data: data, encoding: .utf8)
            
            sqlite3_bind_text(statement, 5, (listString! as NSString).utf8String, -1, nil)
            
            if sqlite3_step(statement) == SQLITE_DONE {
                print("Data inserted success")
            }else {
                print("Data is not inserted in table")
            }
        } else {
          print("Query is not as per requirement")
        }
        
    }
    
    
    func read(avg : Int) -> [DBGrade] {
        var mainList = [DBGrade]()
        
        let query = "SELECT * FROM your_table_name;"
        var statement : OpaquePointer? = nil
        if sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK{
            while sqlite3_step(statement) == SQLITE_ROW {
                let id = Int(sqlite3_column_int(statement, 0))
                let name = String(describing: String(cString: sqlite3_column_text(statement, 1)))
                let result = String(describing: String(cString: sqlite3_column_text(statement, 2)))
                let avg = Int(sqlite3_column_int(statement, 3))
                let list = String(describing: String(cString: sqlite3_column_text(statement, 4)))

                let model = DBGrade()
                model.id = id
                model.name = name
                model.result = result
                model.avg = avg
                
                let data = try! JSONDecoder().decode([Grade].self, from: list.data(using: .utf8)!)
                
                model.list = data
                
                mainList.append(model)
            }
        }
        return mainList
    }
    func update(id : Int, name : String, result : String, avg : Int, list : [Grade]) {
        let data = try! JSONEncoder().encode(list)
        let listString = String(data: data, encoding: .utf8)
        let query = "UPDATE grade SET name = '\(name)', result = '\(result)', avg = \(avg), list = '\(listString!)' WHERE id = \(id);"
        var statement : OpaquePointer? = nil
        if sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK{
            if sqlite3_step(statement) == SQLITE_DONE {
                print("Data updated success")
            }else {
                print("Data is not updated in table")
            }
        }
    }
    
    func delete(id : Int) {
        let query = "DELETE FROM grade where id = \(id)"
        var statement : OpaquePointer? = nil
        if sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK{
            if sqlite3_step(statement) == SQLITE_DONE {
                print("Data delete success")
            }else {
                print("Data is not deleted in table")
            }
        }
    }

Comments

Popular posts from this blog

Learn Swift Programming in 1 Day

Firebase Demo Code with Swift5

MUSIC PLAYER - PLAY, PAUSE, NEXT, BACK #Swift5 #XCode