简单的Sqlite使用方法
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使用方法的更多相关文章
- R语言:用简单的文本处理方法优化我们的读书体验
博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html 前言 延续之前的用R语言读琅琊榜小说,继续讲一下利用R语言做一些简单的文本处理.分词的事情.其实 ...
- CSharpGL(40)一种极其简单的半透明渲染方法
CSharpGL(40)一种极其简单的半透明渲染方法 开始 这里介绍一个实现半透明渲染效果的方法.此方法极其简单,不拖累渲染速度,但是不能适用所有的情况. 如下图所示,可以让包围盒显示为半透明效果. ...
- 简单工厂VS工厂方法
前言: GOF经典的23种设计模式在IT界现已被广为流传.由于比较长时间没有用了,个人对于不同模式与模式之间的区别也渐渐模糊,故开始重温设计模式的思想.也希望更给对设计模式感兴趣的朋友些许的启发. - ...
- 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 ...
- 结合实例分析简单工厂模式&工厂方法模式&抽象工厂模式的区别
之前写过一篇关于工厂模式(Factory Pattern)的随笔,里面分析了简单工厂模式,但对于工厂方法和抽象工厂的分析较为简略.这里重新分析分析三者的区别,工厂模式是java设计模式中比较简单的一个 ...
- Java设计模式之简单工厂、工厂方法和抽象工厂
在前面的学习中(参见前面的博客),我们学到了很多OO原则: 封装变化 多用组合,少用继承 针对接口/超类编程,不针对实现编程 松耦合 开闭原则 让我们从一个简单的类开始,看看如何将之改造成符合OO原则 ...
- 最简单的 RabbitMQ 监控方法 - 每天5分钟玩转 OpenStack(158)
这是 OpenStack 实施经验分享系列的第 8 篇. 先来看张图:这是 Nova 的架构图,我们可以看到有两个组件处于架构的中心位置:数据库和Queue.数据库保存状态信息,而几乎所有的 nova ...
- Java实现一个简单的加密解密方法
Crypto是Java语言写的一个简单的加密解密方法. 使用方法: 加密方法 String cipherte=Enande.encrypt(content, pass): 解密方法 Enande.de ...
- C#设计模式之5:简单工厂和工厂方法模式
工厂模式包含三种,简单工厂模式,工厂方法模式,抽象工厂模式.这三种都是解决了一个问题,那就是对象的创建问题.他们的职责就是将对象的创建和对象的使用分离开来. 当我们创建对象的时候,总是会new一个对象 ...
随机推荐
- vue通信
组件实例的作用域是孤立的. 一.父子通信 父组件通过props向下传递数据给子组件,子组件通过events给父组件发送消息. 要让子组件使用父组件的数据,我们需要通过子组件的props选项.prop是 ...
- iOS如何让主界面不显示NavigationBar
这个问题曾经困扰过我.现在我给出正解.- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self ...
- 安装canal
一.安装前准备 配置Mysql: [mysqld] log-bin=mysql-bin #添加这一行就ok binlog-format=ROW #选择row模式 server_id=1 #配置mysq ...
- virt-manager 操作 kvm虚拟机中鼠标不同步的问题
在/etc/libvirt/qemu下找到对应的xml配置文件 在<devices>标签下添加 <input type='tablet' bus='usb'/> 然后 vi ...
- Django在生产环境中的部署
基本思路 1.方案:Nginx+uwsgi 这样大体的流程是:nginx作为服务器最前端,负责接收client的所有请求,统一管理.静态请求由Nginx自己处理.非静态请求通过uwsgi传递给Djan ...
- 013-HQL中级3-Hive四种数据导入方式介绍
Hive的几种常见的数据导入方式这里介绍四种:(1).从本地文件系统中导入数据到Hive表:(2).从HDFS上导入数据到Hive表:(3).从别的表中查询出相应的数据并导入到Hive表中:(4).在 ...
- Html5实现iPhone开机界面
今天我突发其想,想到可以用HTML5来仿照苹果操作系统做一个能在Web平台运行的iOS. 当然,要开发出一个操作系统,等我再归山修练一百年再说吧.今天就先娱乐一下,先搞一个开机界面. 完工后的图片: ...
- 宏表达式与函数、#undef、条件编译、
宏表达式在预编译期被处理,编译器不知道宏表达式的存在. 宏表达式没有任何的调用开销 宏表达式中不能出现递归定义. C语言中强大的内置宏 __FILE__:被编译的文件名 //双底线 __LINE__: ...
- struts2.3+spring3.2+hibernate4.2例子
有些教程比较老,可是版本更新不等人,基于马士兵老师小例子,自己重新引用了新的包,调试确实有点烦人,但是通过英文文档和google解决问题.官网的更新超快,struts2.3+spring3.2+hib ...
- TensorFlow学习笔记(七)TesnorFlow实现计算加速
目录: 一.TensorFlow使用GPU 二.深度学习训练与并行模式 三.多GPU并行 四.分布式TensorFlow 4.1分布式TensorFlow的原理 4.2分布式TensorFlow模型训 ...