SQLiteDB库新增的SQLTable功能详解(便于操作SQLite库)

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

控制台输出如下:

时间: 2024-08-01 08:06:05

SQLiteDB库新增的SQLTable功能详解(便于操作SQLite库)的相关文章

Discuz! 7.1新增“站长推荐”功能详解

http://www.aliyun.com/zixun/aggregation/29799.html">Discuz! 7.1版本进一步完善和创新社区论坛系统的功能,用户采用在Discuz! 7.1搭建的社区论坛中可以注册一个帐号,登录浏览更多精彩内容,并随时发布观点与大家互动交流,体验2009年主流网络社区的创新应用.为了更好的实现对社区热点信息的聚焦,Discuz! 7.1新增了"站长推荐"功能,成为强化社区信息聚焦重要应用手段. 图 01 通过Discuz! 7.

Bkh1.1.5建站系统功能概述与功能详解_常用工具

Bkh1.1.5功能详解 目录 一.    Bkh1.1.5建站系统功能概述.... 3 二.    注册用户功能详解.... 4 1.     注册用户功能概述... 4 2.     怎样注册成为一个站点的用户... 4 3.     登陆站点找到管理菜单... 5 4.     用户设置功能... 6 5.     我的文件库功能... 9 6.     我自己的站点... 9 7.     我加入的站点... 12 8.     我拥有的角色... 13 9.     我的博客... 1

ASP中利用OWC控件实现图表功能详解

控件|图表|详解 在ASP中利用OWC(Office Web Components)控件可轻松实现各种图表功能,如饼图,簇状柱型图,折线图等. 在下面的代码中我详细的给出了饼图,簇状柱型图,折线图的使用方法.OWC的更多功能,属性可参加MSOWCVBA.chm帮助文件(在office 2000的文件夹下大家自己找). testOWC.asp <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <

System.Data.DataTable计算功能详解

using System; using System.ComponentModel; using System.Data; using System.Windows.Forms; namespace WindowsApplication1 ...{ public partial class Form1 : Form ...{ public Form1() ...{ InitializeComponent(); } private void button1_Click(object sender,

java(jsp)整合discuz同步登录功能详解

 jsp整合discuz同步登录功能详解,Uenter是Comsenz旗下各个产品之间信息直接传递的一个桥梁,通过UCenter站长可以无缝整合Comsenz系列产品,Center拥有机制完善的接口,经过简单修改便可以挂接其它任何平台的第三方的网络应用程序 最近做了一个资源库系统的项目,老师说可以搭建开源论坛替代自己开发社交模块,正好在开源中国上看到了一个利用discuz的UCenter功能实现同步登录的开源项目(https://code.google.com/p/discuz-ucenter-

Python标准库之Sys模块使用详解

  这篇文章主要介绍了Python标准库之Sys模块使用详解,本文讲解了使用sys模块获得脚本的参数.处理模块.使用sys模块操作模块搜索路径.使用sys模块查找内建模块.使用sys模块查找已导入的模块等使用案例,需要的朋友可以参考下 sys 模块提供了许多函数和变量来处理 Python 运行时环境的不同部分. 处理命令行参数 在解释器启动后, argv 列表包含了传递给脚本的所有参数, 列表的第一个元素为脚本自身的名称. 使用sys模块获得脚本的参数 代码如下: print "script n

10个实用的电脑运行命令功能详解

  10个实用的电脑运行命令功能详解 要使用命令操作,最基本的是先需要如何打开运行操作框,主要有2种方法: 1.最快捷方法:使用 Windows + R 组合快捷键,快速呼出命令操作窗口. 2.常用方法:点击桌面左下角的"开始"然后找到并点击打开→"运行". 使用方法,打开命令操作窗口后,只要输入输入命令,然后按回车键或点击"确定"即可允许命名,实现各种功能. 了解如何打开命名操作框之后,接下来就来分享一下实用的命令吧,使用命令可以实现很多功能,

Photoshop液化功能详解与瘦身实作

从基础认识到实作范例,一篇文章就让你学会好玩的液化工具,一起来练习吧 液化功能详解 向前弯曲工具:手指的图示有点像是根据你游标的移动(按住)扭曲,像是咖啡拉花.按住shift在画面上拖曳可以拉出直线. 重建工具:不管经过多少扭曲的效果都能用这个工具矫正回原状. 瞬时针扭转工具:按住可瞬时针扭转像素,按住ALT可以逆时针旋转. 缩拢工具:按住可以将像素往内缩.通常轻点一两下就好啦~我的妈阿!你是谁?? 膨胀工具:和缩拢工具相反,按住可以让像素往外扩张.根本是鱼眼相机哈哈哈. 分类: PS入门教程

Win7控制面板功能详解

系统控制面板是电脑控制核心,或者称为系统控制中心,从控制面板中我们可以进入电脑基本的系统设置和控制,一起看看Win7控制面板功能详解. 在win7操作系统中,微软对控制面板有着较多的改进设计,很多刚开始使用win7的用户多少有点生疏.今天,我们来介绍一下win7控制面板方面的使用技巧. 在win7系统中,控制面板一般以类别的形式来显示功能菜单,分为系统和安全.用户帐户和家庭安全.网络和Internet.外观和个性化.硬件和声音.程序等类别,在每个类别下显示一些常用功能. 一.巧妙利用查看方式 对