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. Hibernate中的映射关系(一对多)

    在数据库中表和表之间的关系有几种,(一对一,一对多,多对多)一对一关系:可以选择任意一方插入外键(one-to-one:one-to-one<--->many-to-one[unique= ...

  2. 购物车删除商品,总价变化 innerHTML = ''并没有删除节点,内容仍存在

    w元素的上的下. function deleteLi(tmpId) { //document.getElementById(tmpId).innerHTML = ''; var wdel = docu ...

  3. 剑指Offer——序列化二叉树

    题目描述: 请实现两个函数,分别用来序列化和反序列化二叉树 分析: 先序遍历可以用来序列化二叉树,序列化过程中,我们用“0xFFFFFFFF”表示结点为NULL. 反序列化便很简单,遇到“0xFFFF ...

  4. 如何使用 libtorch 实现 AlexNet 网络?

    如何使用 libtorch 实现 AlexNet 网络? 按照图片上流程写即可.输入的图片大小必须 227x227 3 通道彩色图片 // Define a new Module. struct Ne ...

  5. MFC Spin 控件

    一般应用: 设置属性: Auto Buddy(自动取关联控件为TAB顺序前一个)Set Buddy Interger(使控件设置关联控件数值,这个值可以是十进制或十六进制)Wrap(数值超过范围时循环 ...

  6. mdf, ldf文件导入到sql server 2005的方法

    mdf, ldf文件导入到sql server 2005的方法 在实际的工作中, 有很多涉及到数据库资料的备份,转移, 恢复等方面的工作, 但是并不是所有的资料都是以.bak格式存在的, 比如说, 你 ...

  7. mysql 下的命令

    1.查看mysql日志vim /var/log/mysqld.log

  8. linux系统压缩\解压命令详解

    转自:http://www.cnblogs.com/qq78292959/archive/2011/07/06/2099427.html. tar -c: 建立压缩档案-x:解压-t:查看内容-r:向 ...

  9. mysql lock

    http://blog.chinaunix.net/uid-21505614-id-289450.html http://bbs.csdn.net/topics/340127237 http://ww ...

  10. C#中获取时间差

    /// <summary> /// 已重载.计算两个日期的时间间隔,返回的是时间间隔的日期差的绝对值. /// </summary> /// <param name=&q ...