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. 桌面不显示IE图标解决方法

    如果你的是WIN7,恰好你的桌面上IE图标不知道怎么被搞咩了. 向这里看过来,这里有一个文件你正好能用上. 使用方法很简单: 猛戳下载,猛戳两下安装 下载解决

  2. Hibernate的大对象映射

    1在持久类中直接声明是java.sql.Blob类型 2在.hbm.xml文件中配置一下信息 <!-- 映射大对象 (就是字符长度超过255和图片想转换成二进制的数据)--> <!- ...

  3. Python全栈day28(上下文管理)

    我们知道在操作文件对象的时候可以这么写 with open('a.txt',''r) as f: 代码 上述叫做上下文管理协议,即with语句,为了让一个对象兼容with语句,必须在这个对象的类中声明 ...

  4. Writing a Discard Server 写个抛弃服务器 世上最简单的协议

    Netty.docs: User guide for 4.x https://netty.io/wiki/user-guide-for-4.x.html The most simplistic pro ...

  5. Linux 下的同步机制

    2017-03-10 回想下最初的计算机设计,在单个CPU的情况下,同一时刻只能由一个线程(在LInux下为进程)占用CPU,且2.6之前的Linux内核并不支持内核抢占,当进程在系统地址运行时,能打 ...

  6. PCI 设备详解三

    上篇文章已经分析了探测PCI总线的部分代码,碍于篇幅,这里另启一篇.重点分析下pci_scan_root_bus函数 2016-10-24 pci_scan_root_bus函数 struct pci ...

  7. MFC工具栏设计

    工具栏中包含了一组用于执行命令的按钮,每个按钮都用一个图标来表示.当单击某个按钮时,会产生一个相应的消息,对这个消息的处理就是按钮的功能实现.将菜单中常用的功能放置在工具栏中,这样可以方便用户操作,省 ...

  8. Centos Docker1.12 远程Rest api访问的配置方法

    Docker默认是没有开启HTTP远程访问的,默认只支持通过unix socket通信操作docker daemon,需要使用HTTP restful接口需要修改配置. 1.修改配置文件,文件位置/l ...

  9. WebStorm keyboard shortcuts

    ctrl + D 向下复制 下面是Webstorm的一些常用快捷键: shift + enter: 另起一行 ctrl + alt + L: 格式化代码 control + E:  光标跳到行尾 it ...

  10. Vue组件的定义方式

    1.使用template标签定义组件 <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...