简单的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一个对象 ...
随机推荐
- 170331、58到家MQ如何快速实现流量削峰填谷
问:为什么会有本文? 答:上一篇文章<到底什么时候该使用MQ?>引起了广泛的讨论,有朋友回复说,MQ的还有一个典型应用场景是缓冲流量,削峰填谷,本文将简单介绍下,MQ要实现什么细节,才能缓 ...
- Maven聚合、Maven仓库jar包以及Spring+MyBatis+JUnit+Maven整合测试的搭建过程
一.Maven将父项目创建到父项目的内部 在父项目的pom.xml上 点右键,选择maven-->new-->maven module project 二.Maven聚合 在某个项目的p ...
- Java进阶SQL函数、网页定时刷新与自定义JSTL函数
一.SQL函数 能够在SQL语句中调用的函数(方法) ,用来实现一些小功能 聚合函数 能够把多行数据聚合成一个值(统计) count() 计数,计算数据条数 max() 计算最大值 m ...
- MongoDB 聚合结果大小限制
The aggregate command can return either a cursor or store the results in a collection. When returnin ...
- packages managers
nodejs npm/bower/component ...rubygemsperl cpanpython pipOS X homebrewsublime text的package-control 那 ...
- 设计模式之Prototype模式
通常我们会使用new 类名()的方法会去生成一个新的实例,但在开发过程中,有时候也会有"在不指定类名的前提下生成实例"的需求,那样,就只能根据现有实例来生成新的实例. 有三种情况, ...
- aliyun ECS da shang chuang 安装小结
1. 服务器系统选centos 6.x 选错了可以在管理界面重装系统 阿里云自带ip限制功能,默认是关闭外网访问(ftp http)进来的,需要手动在管理界面 - 本实例安全组 - 配置. 先安装v ...
- window下cmd的宽度调整
一直被cmd的宽度这么了好些年,刚才搜索了下,还真可以设置.标题栏右键属性,调整屏幕缓冲区宽度,只要足够长就不会换行了,然后调整窗口大小-宽度,不能超过屏幕缓冲区宽度,当小于屏幕缓冲区的时候,就会显示 ...
- Appium+python移动端自动化测试-python库及pycharm安装(二)
一.安装python库 安装python库有很多种方法,如pip安装.源文件安装.运行包安装,但我们最常用的就是使用pip进行安装 Appium+python做移动端的自动化测试,所需要安装以下pyt ...
- notepad快捷键总结
notepad快捷键总结 常用快捷键: 快捷键 功能1.Ctrl-D 复制当前行2.Ctrl-L 删除当前行3.Ctrl-T 把当前行和前面一行调换位置4.F11 切换全屏模式5.Ctrl-Shft- ...