sqlite boolean 类型|SQLiteDB库新增的SQLTable功能详解(便于操作SQLite库)

更新时间:2020-03-28    来源:php与数据库    手机版     字体:

【www.bbyears.com--php与数据库】

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()
 
    }
}

控制台输出如下:

原文:Swift - SQLiteDB库新增的SQLTable功能详解(便于操作SQLite库)

本文来源:http://www.bbyears.com/jiaocheng/90238.html