1. 程式人生 > >SQLite.swift —— 例項教程(增刪查改)Swift 3

SQLite.swift —— 例項教程(增刪查改)Swift 3

這裡寫圖片描述

本文介紹下SQLite.swift的基本使用方法,包括與資料庫建立連線、建表、增、刪、查、改,以上基本用法。文中程式碼都是從當前專案中直接粘下來的,並不能直接執行,但是核心的東西都在了。

這個是SQLite.swift的網址,裡面有簡單的介紹(貼上複製到位址列):
https://github.com/stephencelis/SQLite.swift
這個是SQLite.swift的文件(全英文,硬著頭皮也得看)
https://github.com/stephencelis/SQLite.swift/blob/master/Documentation/Index.md#sqliteswift-documentation

第三方庫的匯入方法這裡不講解。

新建一個iOS程式,並新建一個swift檔案命名為Database並建立結構體。
這裡寫圖片描述

這裡建立一個燈光列表,具體如下:

列表項 id address name colorValue lampType
項型別 Int64 Int64 String String Int64

//
//  Database.swift
//  iOS_Client
//
//  Created by
AlexTiger on 2020/13/33. // Copyright © 2020年 Tiger. All rights reserved. // import Foundation import SQLite struct Database { var db: Connection! init() { connectDatabase() } // 與資料庫建立連線 mutating func connectDatabase(filePath: String = "/Documents") -> Void { let sqlFilePath = NSHomeDirectory() + filePath + "/db.sqlite3"
do { // 與資料庫建立連線 db = try Connection(sqlFilePath) print("與資料庫建立連線 成功") } catch { print("與資料庫建立連線 失敗:\(error)") } } // ===================================== 燈光 ===================================== let TABLE_LAMP = Table("table_lamp") // 表名稱 let TABLE_LAMP_ID = Expression<Int64>("lamp_id") // 列表項及項型別 let TABLE_LAMP_ADDRESS = Expression<Int64>("lamp_address") let TABLE_LAMP_NAME = Expression<String>("lamp_name") let TABLE_LAMP_COLOR_VALUE = Expression<String>("lamp_colorValue") let TABLE_LAMP_LAMP_TYPE = Expression<Int64>("lamp_lampType") // 建表 func tableLampCreate() -> Void { do { // 建立表TABLE_LAMP try db.run(TABLE_LAMP.create { table in table.column(TABLE_LAMP_ID, primaryKey: .autoincrement) // 主鍵自加且不為空 table.column(TABLE_LAMP_ADDRESS) table.column(TABLE_LAMP_NAME) table.column(TABLE_LAMP_COLOR_VALUE) table.column(TABLE_LAMP_LAMP_TYPE) }) print("建立表 TABLE_LAMP 成功") } catch { print("建立表 TABLE_LAMP 失敗:\(error)") } } // 插入 func tableLampInsertItem(address: Int64, name: String, colorValue: String, lampType: Int64) -> Void { let insert = TABLE_LAMP.insert(TABLE_LAMP_ADDRESS <- address, TABLE_LAMP_NAME <- name, TABLE_LAMP_COLOR_VALUE <- colorValue, TABLE_LAMP_LAMP_TYPE <- lampType) do { let rowid = try db.run(insert) print("插入資料成功 id: \(rowid)") } catch { print("插入資料失敗: \(error)") } } // 遍歷 func queryTableLamp() -> Void { for item in (try! db.prepare(TABLE_LAMP)) { print("燈光 遍歷 ———— id: \(item[TABLE_LAMP_ID]), address: \(item[TABLE_LAMP_ADDRESS]), name: \(item[TABLE_LAMP_NAME]), colorValue: \(item[TABLE_LAMP_COLOR_VALUE]), lampType: \(item[TABLE_LAMP_LAMP_TYPE])") } } // 讀取 func readTableLampItem(address: Int64) -> Void { for item in try! db.prepare(TABLE_LAMP.filter(TABLE_LAMP_ADDRESS == address)) { print("\n讀取(燈光)id: \(item[TABLE_LAMP_ID]), address: \(item[TABLE_LAMP_ADDRESS]), name: \(item[TABLE_LAMP_NAME]), colorValue: \(item[TABLE_LAMP_COLOR_VALUE]), lampType: \(item[TABLE_LAMP_LAMP_TYPE])") } } // 更新 func tableLampUpdateItem(address: Int64, newName: String) -> Void { let item = TABLE_LAMP.filter(TABLE_LAMP_ADDRESS == address) do { if try db.run(item.update(TABLE_LAMP_NAME <- newName)) > 0 { print("燈光\(address) 更新成功") } else { print("沒有發現 燈光條目 \(address)") } } catch { print("燈光\(address) 更新失敗:\(error)") } } // 刪除 func tableLampDeleteItem(address: Int64) -> Void { let item = TABLE_LAMP.filter(TABLE_LAMP_ADDRESS == address) do { if try db.run(item.delete()) > 0 { print("燈光\(address) 刪除成功") } else { print("沒有發現 燈光條目 \(address)") } } catch { print("燈光\(address) 刪除失敗:\(error)") } } }

下面在ViewController.swift中呼叫以上方法

class ViewController: UIViewController {

    // 資料庫宣告
    var database: Database!

    override func viewDidLoad() {
        super.viewDidLoad()

        // 與資料庫建立連線
        database = Database()

        // 建立列表(有列表後不再建立)
        database.tableLampCreate()

        // 插入兩條資料 
        database.tableLampInsertItem(address: 51, name: "燈光1", colorValue: "#FFFFFF", lampType: 0)
        database.tableLampInsertItem(address: 52, name: "燈光2", colorValue: "#AAAAAA", lampType: 1)

        // 遍歷列表(檢查插入結果)
        database.queryTableLamp()

        // 根據條件查詢
        database.readTableLampItem(address: 52)

        // 修改列表項
        database.tableLampUpdateItem(address: 51, newName: "客廳大燈")

        // 遍歷列表(檢查修改結果)
        database.queryTableLamp()

        // 刪除列表項
        database.tableLampDeleteItem(address: 52)

        // 遍歷列表(檢查刪除結果)
        database.queryTableLamp()

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

下面執行下試試看看結果是否符合預期(本人是在真機上除錯的,iPhone SE,模擬器也一樣的效果)
這裡寫圖片描述

再次執行程式,建表失敗(表已存在)
這裡寫圖片描述

文章到這裡就結束了,本文關於SQLite.swift的用法介紹的還不夠全面,如果有特殊需要的話還是得去官方文件找答案。