SQLite.swift的简单使用
使用cocoapod 来进行引入
pod ‘SQLite.swift’
//
// SQLiteTool.swift
// CreateLectureForSwift
//
// Created by coder on 2019/6/25.
// Copyright © 2019 AlexanderYeah. All rights reserved.
//
import Foundation
import SQLite
// id
let id = Expression(“id”)
// 名字
let name = Expression<String?>(“name”)
// 价格
let price = Expression(“price”)
// 价格
let imgUrl = Expression(“imgUrl”)
// 价格
let p_id = Expression(“p_id”)
// 数量
let quantity = Expression(“quantity”)
class SQLiteTool: NSObject {
// 单例方法
static let tool:SQLiteTool = {let tool = SQLiteTool();return tool;
}();// 数据库
private var db : Connection?;
// 表
private var tb :Table?;
}
extension SQLiteTool{
// 打开数据库返回一个连接
func openDB() -> Connection {if db == nil {let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!;print(path as Any);db = try! Connection("\(path)/shopCart.sqlite3"); db?.busyTimeout = 5;}return db!;
}// MAKR:- 创建表
func createTb() ->Table {if self.tb == nil {// 创建表self.tb = Table("cart1");// 插入内容try! openDB().run(// temporary 是否为临时表// ifNotExists 是否在不存在的时候进行创建// withoutRowid 是否自动创建自增的idself.tb!.create(temporary: false, ifNotExists: true, withoutRowid: false, block: { (t) int.column(id,primaryKey: true);t.column(name);t.column(price);t.column(imgUrl);t.column(quantity);t.column(p_id);}))}return self.tb!;}// MAKR:- 插入操作func insert(model:ProductModel) {// 插入的新的一条的时候 判断当前的条是否存在表中 如果存在的话 直接修改其数量即可let query = self.tb!.filter(p_id == model.Id!);let result = try! self.db!.prepare(query);let array = Array(result);if array.count == 0 {print("插入前查询结果为0,执行插入操作");let insert = self.tb?.insert(p_id <- model.Id!,name <- model.Name,price <- model.SalePrice!,quantity <- 1,imgUrl <- model.CoverImage!)// 执行插入操作 插入成功会返回对应的ROWIDlet rowID = try? self.db?.run(insert!);if (rowID != nil) {print("插入成功")}else{print("插入失败")}}else{print("不为0 做更新操作");let row = array.first;let targetQuantity = try? row!.get(quantity);if try! (self.db?.run(query.update(quantity <- (targetQuantity! + 1))))! > 0{print("修改数据成功 count == 1");}else{print("修改数据失败");}}}// MARK:- 删除操作
func delete(rowId:Int64){// 删除单行的数据let del = self.tb?.filter(id == rowId);do {if try self.db!.run(del!.delete()) > 0 {print("删除成功")}else{print("删除失败")}} catch {print("删除失败")}
}
// MARK:- 查询全部数据
func findAll() ->[Row]{// 查询全部的数据let result = try! db?.prepare(self.tb!);return Array(result!);}// MAKR: - 获取购物车商品的数量
func getCartTotalCount() -> Int64{let result = try! db?.prepare(self.tb!);let array = Array(result!);var totalCount:Int64 = 0;for row in array {totalCount = (try! row.get(quantity)) + totalCount;}return totalCount;
}
}
SQLite.swift的简单使用相关推荐
- SQLite.swift —— 实例教程(增删查改)Swift 3
本文介绍下SQLite.swift的基本使用方法,包括与数据库建立连接.建表.增.删.查.改,以上基本用法.文中代码都是从当前项目中直接粘下来的,并不能直接运行,但是核心的东西都在了. 这个是SQLi ...
- 【iOS数据持久化】数据库(SQLite.swift)和FMDB
数据持久化之SQLite数据库(SQLite.swift使用) 一. 简介 SQLite是一款轻型的嵌入式数据库,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就足够了.它的处理速 ...
- 如何使用 Swift 开发简单的条形码检测器?
[编者按]本文作者为 Matthew Maher,主要手把手地介绍如何用 Swift 构建简单的条形码检测器.文章系 OneAPM 工程师编译整理. 超市收银员对货物进行扫码,机场内录入行李或检查乘客 ...
- 围绕sqlite构建一个简单的Typescript ORM
目录 背景 使用代码 兴趣点 背景 我经常使用C#, 当我与database通信时,我喜欢使用基于ORM的结构. 现在我开始使用构建应用程序react-native并希望sqlite用作存储. 但我讨 ...
- Android开发:ListView+SQLite实现一个简单的备忘录程序(ADT插件环境)
前话:明天要交安卓程序了,前几天在自己的电脑上配置了一下安卓环境,但是项目无法编译,原因好像是jdk版本过高,有一个包无法支持,然后换成1.8的jdk也不行,昨晚折腾到凌晨一点半也没成功,今天借了同学 ...
- Android软件开发之通讯录——添加联系人以及SQLite工具的简单使用
关于通讯录获取联系人信息以及联系人信息的存储结构,下面链接的博客的博主已经简单说明: http://blog.csdn.net/snwrking/article/detail/7601794 ---- ...
- SQLite数据库的简单介绍
SQLite是android已经封装好的数据库,只需要简单的代码就可以实现增删改查.用来做android简易的数据库非常方便,下面简单的介绍下其实现: 首选需要创建数据库,使用SQLiteOpenHe ...
- swift:简单使用翻页控制器UIPageViewController
一.小叙 UIPageViewController是一个实现图书阅读的控制器,使用它可以设置书脊位置.单双页.过渡效果等,它是通过代理的方式来实现翻页,也即上一页.下一页.最终这个UIPageView ...
- SQLite数据库的简单读写操作
安卓系统自带SQLite数据库,SDK中对SQLite的操作由SQLiteDatabase完成,涉及到的类有如下几个: 1.SQLiteDatabase:代表数据库本身,支持对数据的标准SQL操作 2 ...
最新文章
- [Gitlab]使用Webhook实现前端项目自动发布
- Python 实现简单的石头剪刀布小游戏
- 舰娘 服务器 维护时间,《舰娘Collection》停止运营公告
- 使用wireshark+ssh+tcpdump远程抓包
- 资源放送丨《PostgreSQL中的锁》PPT视频
- Opennms配置SNMP
- ssms .net3.5_SSMS 18.4中SQL Server查询存储选项
- 字节码指令之加载与存储指令
- java word书签_java 操作word 书签并插入值
- 微信php带菜单事件,phpcms微信插件自定义菜单绑定栏目获取消息的实现与应用
- 大学生电脑装什么软件?我整理了 10 款 Windows 神器,个个都是宝藏级!
- 镜像格式二十年:从 Knoppix 到 OCI-Image-v2
- [渝粤教育] 沈阳理工大学 复变函数与积分变换 参考 资料
- 出租车司机 - 人才!
- mysql connec_mysql++ Connect
- (转)图片格式与设计那点事儿
- 【FMC156】基于VITA57.1标准的2路2.5GSPS采样率16位分辨率直流耦合DA播放FMC子卡模块(DAC38J82)
- seq2seq + attention 详解
- 国内资深原画师绿榴莲--浅谈原画场景
- 少儿编程怎么培养罗辑思维
热门文章
- 数据库的三大范式和事物
- http://www.shanghaihaocong.com-WORDPRESS开发的企业主题站
- 关于IssueVision命令模式中对象生命周期的困惑
- AddressSanitizer+cmake
- OpenCV 【六】————youtu(图像)——旋转保存图片
- ASP.NET中用healthMonitor属性用
- 用memcache.php监测memcache的状况
- zip 的压缩原理与实现
- 一种注册表沙箱的思路、实现——研究Reactos中注册表函数的实现3
- Caffe源码中layer文件分析