使用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的简单使用相关推荐

  1. SQLite.swift —— 实例教程(增删查改)Swift 3

    本文介绍下SQLite.swift的基本使用方法,包括与数据库建立连接.建表.增.删.查.改,以上基本用法.文中代码都是从当前项目中直接粘下来的,并不能直接运行,但是核心的东西都在了. 这个是SQLi ...

  2. 【iOS数据持久化】数据库(SQLite.swift)和FMDB

    数据持久化之SQLite数据库(SQLite.swift使用) 一.     简介 SQLite是一款轻型的嵌入式数据库,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就足够了.它的处理速 ...

  3. 如何使用 Swift 开发简单的条形码检测器?

    [编者按]本文作者为 Matthew Maher,主要手把手地介绍如何用 Swift 构建简单的条形码检测器.文章系 OneAPM 工程师编译整理. 超市收银员对货物进行扫码,机场内录入行李或检查乘客 ...

  4. 围绕sqlite构建一个简单的Typescript ORM

    目录 背景 使用代码 兴趣点 背景 我经常使用C#, 当我与database通信时,我喜欢使用基于ORM的结构. 现在我开始使用构建应用程序react-native并希望sqlite用作存储. 但我讨 ...

  5. Android开发:ListView+SQLite实现一个简单的备忘录程序(ADT插件环境)

    前话:明天要交安卓程序了,前几天在自己的电脑上配置了一下安卓环境,但是项目无法编译,原因好像是jdk版本过高,有一个包无法支持,然后换成1.8的jdk也不行,昨晚折腾到凌晨一点半也没成功,今天借了同学 ...

  6. Android软件开发之通讯录——添加联系人以及SQLite工具的简单使用

    关于通讯录获取联系人信息以及联系人信息的存储结构,下面链接的博客的博主已经简单说明: http://blog.csdn.net/snwrking/article/detail/7601794 ---- ...

  7. SQLite数据库的简单介绍

    SQLite是android已经封装好的数据库,只需要简单的代码就可以实现增删改查.用来做android简易的数据库非常方便,下面简单的介绍下其实现: 首选需要创建数据库,使用SQLiteOpenHe ...

  8. swift:简单使用翻页控制器UIPageViewController

    一.小叙 UIPageViewController是一个实现图书阅读的控制器,使用它可以设置书脊位置.单双页.过渡效果等,它是通过代理的方式来实现翻页,也即上一页.下一页.最终这个UIPageView ...

  9. SQLite数据库的简单读写操作

    安卓系统自带SQLite数据库,SDK中对SQLite的操作由SQLiteDatabase完成,涉及到的类有如下几个: 1.SQLiteDatabase:代表数据库本身,支持对数据的标准SQL操作 2 ...

最新文章

  1. [Gitlab]使用Webhook实现前端项目自动发布
  2. Python 实现简单的石头剪刀布小游戏
  3. 舰娘 服务器 维护时间,《舰娘Collection》停止运营公告
  4. 使用wireshark+ssh+tcpdump远程抓包
  5. 资源放送丨《PostgreSQL中的锁》PPT视频
  6. Opennms配置SNMP
  7. ssms .net3.5_SSMS 18.4中SQL Server查询存储选项
  8. 字节码指令之加载与存储指令
  9. java word书签_java 操作word 书签并插入值
  10. 微信php带菜单事件,phpcms微信插件自定义菜单绑定栏目获取消息的实现与应用
  11. 大学生电脑装什么软件?我整理了 10 款 Windows 神器,个个都是宝藏级!
  12. 镜像格式二十年:从 Knoppix 到 OCI-Image-v2
  13. [渝粤教育] 沈阳理工大学 复变函数与积分变换 参考 资料
  14. 出租车司机 - 人才!
  15. mysql connec_mysql++ Connect
  16. (转)图片格式与设计那点事儿
  17. 【FMC156】基于VITA57.1标准的2路2.5GSPS采样率16位分辨率直流耦合DA播放FMC子卡模块(DAC38J82)
  18. seq2seq + attention 详解
  19. 国内资深原画师绿榴莲--浅谈原画场景
  20. 少儿编程怎么培养罗辑思维

热门文章

  1. 数据库的三大范式和事物
  2. http://www.shanghaihaocong.com-WORDPRESS开发的企业主题站
  3. 关于IssueVision命令模式中对象生命周期的困惑
  4. AddressSanitizer+cmake
  5. OpenCV 【六】————youtu(图像)——旋转保存图片
  6. ASP.NET中用healthMonitor属性用
  7. 用memcache.php监测memcache的状况
  8. zip 的压缩原理与实现
  9. 一种注册表沙箱的思路、实现——研究Reactos中注册表函数的实现3
  10. Caffe源码中layer文件分析