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 是否自动创建自增的id
self.tb!.create(temporary: false, ifNotExists: true, withoutRowid: false, block: { (t) in
t.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!)
// 执行插入操作 插入成功会返回对应的ROWID
let 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;
}
}