Sqlite的作用不言而喻,就是帮助开发者建立本地数据库,存储一些基本信息。不做过多阐述,需要的深入了解的可以找度娘,本文是针对Sqlite小白在使用上提供一些实例。

一、导入Sqlite.swift

pod 'SQLite.swift'

二、建立数据库实例

  以下表字段做实例说明。

  (1)与数据库建立连接

//与数据库建立连接
mutating func connectDataBase(filePath:String = "/Documents") -> Void {
let sqliteFilePath = NSHomeDirectory() + filePath + "/db.sqlite3" do {
//与数据库建立连接
db = try Connection(sqliteFilePath)
print("与数据库建立连接 成功")
}catch{
print("与数据库建立连接 失败:\(error)")
}
}

  (2)建立TATLE_LAMP表

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

  (3)插入记录

 //插入
func tableLampInsert(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)")
}
}

  (4)遍历数据库及读取某条记录

//遍历数据库
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 tableLampRead(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])")
}
}

  (5)更新单条记录

 //更新
func tableLampUpdate(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)) > {
print("灯光\(address)更新成功")
} else {
print("没有发现 灯光条目 \(address)")
}
} catch {
print("灯光\(address)更新失败:\(error)")
}
}

  (6)删除单条记录

//删除
func tableLampDelete(address:Int64) -> Void {
let item = TABLE_LAMP.filter(TABLE_LAMP_ADDRESS == address)
do {
if try db.run(item.delete()) > {
print("灯光\(address) 删除成功")
} else {
print("没有发现 灯光条目 \(address)")
}
} catch {
print("灯光\(address) 删除失败:\(error)")
}
}

  (7)使用数据库完成常规操作

 //数据库建立连接
dataBase = NADataBaseSqlite() //建立列表(有列表后不再建立)
dataBase.tableLampCreate() //插入两条数据
dataBase.tableLampInsert(address: , name: "灯光1", colorValue: "#FFFFFF", lampType: )
dataBase.tableLampInsert(address: , name: "灯光2", colorValue: "#AAAAAA", lampType: ) //遍历列表(检查插入结果)
dataBase.queryTableLamp() //根据条件查询
dataBase.tableLampRead(address: ) //修改列表项
dataBase.tableLampUpdate(address: , newName: "客厅大灯") //遍历列表(检查修改结果)
dataBase.queryTableLamp() //删除列表项
dataBase.tableLampDelete(address: ) //遍历列表(检查删除结果)
dataBase.queryTableLamp()

附:完成的实现代码

//
// ViewController.swift
// SqliteSwiftDemo
//
// Created by xjf on 2019/4/14.
// Copyright © 2019 xfj. All rights reserved.
// import UIKit
import HandyJSON class ViewController: UIViewController {
var dataBase : NADataBaseSqlite!
override func viewDidLoad() {
super.viewDidLoad() //数据库建立连接
dataBase = NADataBaseSqlite() //建立列表(有列表后不再建立)
dataBase.tableLampCreate() //插入两条数据
dataBase.tableLampInsert(address: , name: "灯光1", colorValue: "#FFFFFF", lampType: )
dataBase.tableLampInsert(address: , name: "灯光2", colorValue: "#AAAAAA", lampType: ) //遍历列表(检查插入结果)
dataBase.queryTableLamp() //根据条件查询
dataBase.tableLampRead(address: ) //修改列表项
dataBase.tableLampUpdate(address: , newName: "客厅大灯") //遍历列表(检查修改结果)
dataBase.queryTableLamp() //删除列表项
dataBase.tableLampDelete(address: ) //遍历列表(检查删除结果)
dataBase.queryTableLamp()
} }

ViewController

//
// NADataBaseSqlite.swift
// SqliteSwiftDemo
//
// Created by xjf on 2019/4/15.
// Copyright © 2019 xjf. All rights reserved.
// import Foundation
import SQLite struct NADataBaseSqlite { var db : Connection! init() {
connectDataBase()
} //与数据库建立连接
mutating func connectDataBase(filePath:String = "/Documents") -> Void {
let sqliteFilePath = NSHomeDirectory() + filePath + "/db.sqlite3" do {
//与数据库建立连接
db = try Connection(sqliteFilePath)
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 tableLampInsert(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 tableLampRead(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 tableLampUpdate(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)) > {
print("灯光\(address)更新成功")
} else {
print("没有发现 灯光条目 \(address)")
}
} catch {
print("灯光\(address)更新失败:\(error)")
}
} //删除
func tableLampDelete(address:Int64) -> Void {
let item = TABLE_LAMP.filter(TABLE_LAMP_ADDRESS == address)
do {
if try db.run(item.delete()) > {
print("灯光\(address) 删除成功")
} else {
print("没有发现 灯光条目 \(address)")
}
} catch {
print("灯光\(address) 删除失败:\(error)")
}
} }

NADataBase

参考连接:Sqlite的增删改查

简单的Sqlite使用方法的更多相关文章

  1. R语言:用简单的文本处理方法优化我们的读书体验

    博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html 前言 延续之前的用R语言读琅琊榜小说,继续讲一下利用R语言做一些简单的文本处理.分词的事情.其实 ...

  2. CSharpGL(40)一种极其简单的半透明渲染方法

    CSharpGL(40)一种极其简单的半透明渲染方法 开始 这里介绍一个实现半透明渲染效果的方法.此方法极其简单,不拖累渲染速度,但是不能适用所有的情况. 如下图所示,可以让包围盒显示为半透明效果. ...

  3. 简单工厂VS工厂方法

    前言: GOF经典的23种设计模式在IT界现已被广为流传.由于比较长时间没有用了,个人对于不同模式与模式之间的区别也渐渐模糊,故开始重温设计模式的思想.也希望更给对设计模式感兴趣的朋友些许的启发. - ...

  4. Simple Factory vs. Factory Method vs. Abstract Factory【简单工厂,工厂方法以及抽象工厂的比较】

    I ran into a question on stackoverflow the other day that sort of shocked me. It was a piece of code ...

  5. 结合实例分析简单工厂模式&工厂方法模式&抽象工厂模式的区别

    之前写过一篇关于工厂模式(Factory Pattern)的随笔,里面分析了简单工厂模式,但对于工厂方法和抽象工厂的分析较为简略.这里重新分析分析三者的区别,工厂模式是java设计模式中比较简单的一个 ...

  6. Java设计模式之简单工厂、工厂方法和抽象工厂

    在前面的学习中(参见前面的博客),我们学到了很多OO原则: 封装变化 多用组合,少用继承 针对接口/超类编程,不针对实现编程 松耦合 开闭原则 让我们从一个简单的类开始,看看如何将之改造成符合OO原则 ...

  7. 最简单的 RabbitMQ 监控方法 - 每天5分钟玩转 OpenStack(158)

    这是 OpenStack 实施经验分享系列的第 8 篇. 先来看张图:这是 Nova 的架构图,我们可以看到有两个组件处于架构的中心位置:数据库和Queue.数据库保存状态信息,而几乎所有的 nova ...

  8. Java实现一个简单的加密解密方法

    Crypto是Java语言写的一个简单的加密解密方法. 使用方法: 加密方法 String cipherte=Enande.encrypt(content, pass): 解密方法 Enande.de ...

  9. C#设计模式之5:简单工厂和工厂方法模式

    工厂模式包含三种,简单工厂模式,工厂方法模式,抽象工厂模式.这三种都是解决了一个问题,那就是对象的创建问题.他们的职责就是将对象的创建和对象的使用分离开来. 当我们创建对象的时候,总是会new一个对象 ...

随机推荐

  1. msvcp71.dll 怎么丢失的?如何修复

    解决方法:另一台电脑上下载这个dll,再用优盘拷回来,复制到c:\windows\system32\下. 个人遇到的情况:迅雷下载东西时,或者在操作迅雷时出现的. win7 64位下 点击下载

  2. Java基础ArrayList、Servlet与Filter

    一.技术分享 迭代器(Iterator) 迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构.迭代器通常被称为"轻量级"对象,因 ...

  3. json序列化懒加载问题

    如果框架使用了json序列化对象,当配置了hibernate懒加载时,可能会抛出异常,或者出现N+1的问题,或者出现无限循环的问题.网上很多解决方案, 基本是这些:@JsonIgnore忽略可能出问题 ...

  4. jstree的checkbox实例+详解

    jstree的checkbox实例较少,思索后决定进行一下整理,先上代码 $("#filtrate_row").on("loaded.jstree",funct ...

  5. kafka Detailed Replication Design V3

    参考,https://cwiki.apache.org/confluence/display/KAFKA/kafka+Detailed+Replication+Design+V3 Major chan ...

  6. 剑指Offer——和为S的两个数字

    题目描述: 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的.   输入描述: 对应每个测试案例,输出两个数,小的先输出. ...

  7. 一.shell基础知识

    参考网站:http://billie66.github.io/TLCL/book/chap08.html 1.字符“*”--展开 [me@linuxbox ~]$ echo * Desktop Doc ...

  8. nsq小试牛刀-0.3.0 API变更

    NSQ是由知名短链接服务商bitly用Go语言开发的实时消息处理系统,具有高性能.高可靠.无视单点故障等优点,是一个非常不错的新兴的消息队列解决方案. nsg易于配置和部署,所有参考都通过命令行指定, ...

  9. 在django中实现支付宝支付(支付宝接口调用)

    支付宝支付 正式环境:用营业执照,申请商户号,appid 测试环境:沙箱环境:https://openhome.alipay.com/platform/appDaily.htm?tab=info 支付 ...

  10. img 标签注意 默认img标签,有一个1px的边框 img{ border: 0; }

    默认img标签,有一个1px的边框 img{ border: 0; }