SQLiteDB庫新增的SQLTable功能詳解(便於操作SQLite庫)

來源:互聯網
上載者:User

SQLiteDB 是一個好用的第三方封裝庫,用於操作 SQLite 資料庫。具體的配置和使用方法可以看我的另一篇文章:Swift - 操作SQLite資料庫(引用SQLite3庫)
這裡主要講解下最新版本中新增的 SQLTable.swift

1,SQLTable是做什麼用的?

有時我們從資料庫中把資料查詢出來以後,為了映射成實體類對象,需要遍曆查詢結果集,一個個給實體類對象賦值。
同樣當實體物件屬性修改後,如果想儲存到資料庫,又需要把對象屬性取出來拼成一個SQL語句執行。
這樣就比較麻煩。
SQLTable 的作用就是把讓實體類繼承 SQLTable,它就會自行將實體類跟資料庫表作關聯映射。只要操作實體類對象就可以直接進行資料的讀取,修改,新增操作。

2,SQLTable的原理

查看 SQLTable.swift 源碼可以看出,其內部實現使用到了Swift的反射,通過遍曆對象內的所有屬性,從而自動拼接成相應的SQL語句來執行。

3,SQLTable的使用

比如我們有一張連絡人表:

 代碼如下 複製代碼
t_user(
uid integer primary key,
uname varchar(20),
mobile varchar(20)
)

(1)首先建立一個連絡人實體類,繼承SQLTable

 

 代碼如下 複製代碼
class User:SQLTable {
    var uid = -1
    var uname  = ""
    var mobile = ""
    
    init() {
        //對應的資料庫表
        super.init(tableName:"t_user")
    }
    
    //設定主鍵(如果主鍵欄位名就是id的話,這個可以省去,不用覆蓋)
    override func primaryKey() -> String {
        return "uid";
    }
    
    required convenience init(tableName:String) {
        self.init()
    }
}

(2)查詢出所有資料

按id升序排列(後面可以跟多個排序欄位)

 

 代碼如下 複製代碼
let data:[User] = User().allRows("uid ASC")
for item in data {
    print("\(item.uid):\(item.uname):\(item.mobile)")
}

(3)儲存資料

如果實體類主鍵在資料庫找不到對應記錄則為新增。否則便為修改。

 代碼如下 複製代碼


let user1 = User()
user1.uname = "hangge.com"
user1.mobile = "123"
if user1.save().success {
    print("資料插入成功")
}

4,完整的範例代碼

 代碼如下 複製代碼


import UIKit
 
class ViewController: UIViewController {
    
    var db:SQLiteDB!
 
    override func viewDidLoad() {
        super.viewDidLoad()
        
        //擷取資料庫執行個體
        db = SQLiteDB.sharedInstance()
        //如果表還不存在則建立表
        db.execute("create table if not exists t_user(uid integer primary key,uname varchar(20),mobile varchar(20))")
        //清空資料庫
        db.execute("delete from t_user")
        
        //插入三條資料
        print("------ 開始插入資料 ------")
        let user1 = User()
        user1.uname = "張三"
        user1.mobile = "123"
        if user1.save().success {
            print("資料插入成功")
        }
        
        let user2 = User()
        user2.uname = "李四"
        user2.mobile = "456"
        if user2.save().success {
            print("資料插入成功")
        }
        
        let user3 = User()
        user3.uname = "王五"
        user3.mobile = "110"
        if user3.save().success {
            print("資料插入成功")
        }
        
        //查詢出所有的使用者(按id排序)
        print("\n------ 開始查詢所有資料 ------")
        let data:[User] = User().allRows("uid ASC")
        for item in data {
            print("\(item.uid):\(item.uname):\(item.mobile)")
        }
        
        //修改資料
        print("\n------ 修改第二條資料 ------")
        data[1].mobile = "hangge.com"
        if data[1].save().success {
            print("資料修改成功")
        }
        
        //重新查詢出所有的使用者(按id排序)
        print("\n------ 重新查詢所有資料 ------")
        let data2:[User] = User().allRows("uid ASC")
        for item in data2 {
            print("\(item.uid):\(item.uname):\(item.mobile)")
        }
    }
 
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
 
    }
}

控制台輸出如下:

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.