SQLite.swift —— 实例教程(增删查改)Swift 3
本文介绍下SQLite.swift的基本使用方法,包括与数据库建立连接、建表、增、删、查、改,以上基本用法。文中代码都是从当前项目中直接粘下来的,并不能直接运行,但是核心的东西都在了。
这个是SQLite.swift的网址,里面有简单的介绍(粘贴复制到地址栏):
https://github.com/stephencelis/SQLite.swift
这个是SQLite.swift的文档(全英文,硬着头皮也得看)
https://github.com/stephencelis/SQLite.swift/blob/master/Documentation/Index.md#sqliteswift-documentation
第三方库的导入方法这里不讲解。
新建一个iOS程序,并新建一个swift文件命名为Database并建立结构体。
这里建立一个灯光列表,具体如下:
列表项 | id | address | name | colorValue | lampType |
---|---|---|---|---|---|
项类型 | Int64 | Int64 | String | String | Int64 |
//
// Database.swift
// iOS_Client
//
// Created by AlexTiger on 2020/13/33.
// Copyright © 2020年 Tiger. All rights reserved.
//import Foundation
import SQLitestruct Database {var db: Connection!init() {connectDatabase()}// 与数据库建立连接mutating func connectDatabase(filePath: String = "/Documents") -> Void {let sqlFilePath = NSHomeDirectory() + filePath + "/db.sqlite3"do { // 与数据库建立连接db = try Connection(sqlFilePath)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_LAMPtry db.run(TABLE_LAMP.create { table intable.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 tableLampInsertItem(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 readTableLampItem(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 tableLampUpdateItem(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)) > 0 {print("灯光\(address) 更新成功")} else {print("没有发现 灯光条目 \(address)")}} catch {print("灯光\(address) 更新失败:\(error)")}}// 删除func tableLampDeleteItem(address: Int64) -> Void {let item = TABLE_LAMP.filter(TABLE_LAMP_ADDRESS == address)do {if try db.run(item.delete()) > 0 {print("灯光\(address) 删除成功")} else {print("没有发现 灯光条目 \(address)")}} catch {print("灯光\(address) 删除失败:\(error)")}}}
下面在ViewController.swift中调用以上方法
class ViewController: UIViewController {// 数据库声明var database: Database!override func viewDidLoad() {super.viewDidLoad()// 与数据库建立连接database = Database()// 建立列表(有列表后不再建立)database.tableLampCreate()// 插入两条数据 database.tableLampInsertItem(address: 51, name: "灯光1", colorValue: "#FFFFFF", lampType: 0)database.tableLampInsertItem(address: 52, name: "灯光2", colorValue: "#AAAAAA", lampType: 1)// 遍历列表(检查插入结果)database.queryTableLamp()// 根据条件查询database.readTableLampItem(address: 52)// 修改列表项database.tableLampUpdateItem(address: 51, newName: "客厅大灯")// 遍历列表(检查修改结果)database.queryTableLamp()// 删除列表项database.tableLampDeleteItem(address: 52)// 遍历列表(检查删除结果)database.queryTableLamp()}override func didReceiveMemoryWarning() {super.didReceiveMemoryWarning()// Dispose of any resources that can be recreated.}}
下面运行下试试看看结果是否符合预期(本人是在真机上调试的,iPhone SE,模拟器也一样的效果)
再次运行程序,建表失败(表已存在)
文章到这里就结束了,本文关于SQLite.swift的用法介绍的还不够全面,如果有特殊需要的话还是得去官方文档找答案。
SQLite.swift —— 实例教程(增删查改)Swift 3相关推荐
- android开发课程表app数据库,基于Android studio 的课程表增删查改功能(基于sqlite)
[实例简介]Android studio 用SQLite实现课程表的增删查改功能,:实现详情浏览.编辑.及新增功能.课程编号可以实现正则检查(编号规则XX00000,XX表示两位大写的字母,00000 ...
- backbonejs mvc框架的增删查改实例
一:开发环境 coffeescript和nodejs需要先安装,没装网上自己查安装步骤. 代码编写环境及esp框架下载: esp框架下载地址:https://github.com/nonocast/e ...
- swift实例教程_Swift示例教程基础
swift实例教程 In this tutorial we'll look into the basic syntax of Swift and run it in our console. 在本教程 ...
- 支持增删查改的简单Java Web通讯录详细教程【基于Mac OS+IDEA+Servlet+JDBC+Tomcat】
本文将以Web版通讯录的形式介绍一个支持简单增删查改的Java Web项目,软硬件环境基于Macbook Air M2+macOS Ventura 13.1+IntelliJ IDEA 2022,技术 ...
- java使用org.w3c.dom解析XML文档,创建、增删查改,保存,读取,遍历元素等操作
全栈工程师开发手册 (作者:栾鹏) java教程全解 java使用org.w3c.dom(java dom)解析XML文档,创建.增删查改,保存,读取,遍历元素等操作 在保存文件时需要载入crimso ...
- MERGE批量增删查改数据
MERGE优点: 在批量处理数据的时候,我可以用到merge一次完成数据处理. 示例代码一: MERGE INTO student AS t using (SELECT '丽水' AS NAME,20 ...
- 5.在MVC中使用泛型仓储模式和工作单元来进行增删查改
原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pat ...
- winform调用webservice增删查改_教你分别用数据库与云函数实现“增删查改”
导语 数据库 API 与云函数"增删查改"的姿势有何不同?对比代码差异往往有助于更好的理解,本文用详细代码帮你寻找答案并巩固基础! ▌一.云开发初始化 wx.cloud.init( ...
- xml02 XML编程(CRUD)增删查改
XML解析技术概述 Demo2.java import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuil ...
- java调用js查询mongo_MongoDB增删查改操作示例【基于JavaScript Shell】
本文实例讲述了MongoDB增删查改操作.分享给大家供大家参考,具体如下: MongoDB自带了一个JavaScript Shell,所以在其中使用js语法是可以的. Insert操作: 单条插入 v ...
最新文章
- 人工智能项目的六投三不投
- AOP原理-创建AOP代理--AnnotationAwareAspectJAutoProxyCreator【InstantiationAwareBeanPostProcessor】的作用
- HTML+CSS实例——漂亮的查询部件(一)
- 椭圆中心到椭圆切线的距离
- 水晶报表加载失败的解决方法
- java.lang.NoClassDefFoundError:org/apache/commons/io/Charsets (jsoup配合htmlunit 爬取异步加载的网页遇到的)
- 18f458中断入口C语言_操作系统开发之——中断
- python写网页插件_用python 实现activex网页控件
- PHP语言的RSA算法加解密程序
- MongoDB是我想要的存储么?
- WPF Ribbon 开发资料分享
- mumu模拟器android调试,如何使用网易mumu模拟器调试安卓程序?
- 赋能智慧交通的5G关键技术
- Android9.0 vendor分区整包升级
- deepin改无盘服务器,UbuntuDeepin系统上搭建nfs服务器
- pytest框架中setup、teardown和setup_class、teardown_class
- 2017年Q1中国无线路由器市场研究报告
- 以太网 因特网 互联网 万维网 的区别
- 解读《欧洲新工业战略》:三个愿景与三大策略
- week3note函数