SQLite.swift使用


SQLite.swift使用

========================
对于这个,我只想上代码。

数据库代码示例

//
//  DataBase.swift
//  RunInto
//
//  Created by 张赛东(手机:15674119605) on 2021/3/3.
//  Copyright © 2021 adong666666. All rights reserved.
//

import Foundation
import SQLite

struct  DataCenterConstant {
    static let dbName = "db.sqlite"
    static let dbFilePath = NSHomeDirectory() + "/Documents/" + DataCenterConstant.dbName
}

class DataBase {
    static let shared = DataBase()
    static var dataBase: Connection? = {
        do {
            return try Connection(DataCenterConstant.dbFilePath)
        } catch {
            assertionFailure("Fail to Create DataBase")
            debugPrint(error)
        }
        return nil
    }()
    
    var cuturalRelicsIntroduction = CulturalRelicsIntroduction()
    init() {
        cuturalRelicsIntroduction.setupTable()
    }
}

// MARK: - Query
extension DataBase {
    // 查询所有文物介绍
    func queryCulturalRelicsIntroduction() -> [Introduction] {
        var intro = [Introduction]()
        do {
            for value in Array(try DataBase.dataBase!.prepare(cuturalRelicsIntroduction.table)) {
                let idForDB = value[cuturalRelicsIntroduction.id]
                let name = value[cuturalRelicsIntroduction.name]
                let introduction = value[cuturalRelicsIntroduction.introduction]
                let photo = value[cuturalRelicsIntroduction.photo]
                let remark = value[cuturalRelicsIntroduction.remark]
                let tempIntroduction = Introduction(idForDataBase: idForDB, image: photo, title: I18n.localizedString(name), text: I18n.localizedString(introduction), date: I18n.localizedString(remark))
                intro.append(tempIntroduction)
            }
        } catch {
            assertionFailure("\(error)")
        }
        return intro
    }
    //查询个别文物介绍
    func queryIntroduction(with id: Int64) -> Introduction? {
        let filter = cuturalRelicsIntroduction.table.filter(id == cuturalRelicsIntroduction.id)
        do {
            guard let pluck = try DataBase.dataBase?.pluck(filter) else {
                return nil
            }
            return  Introduction(idForDataBase: pluck[cuturalRelicsIntroduction.id],
                                 image: pluck[cuturalRelicsIntroduction.photo],
                                 title: pluck[cuturalRelicsIntroduction.name],
                                 text: pluck[cuturalRelicsIntroduction.introduction],
                                 date: pluck[cuturalRelicsIntroduction.remark])
        } catch {
            assertionFailure()
        }
        return nil
    }
    func queryIntroduction(with name: String) -> Introduction? {
        let filter = cuturalRelicsIntroduction.table.filter(name == cuturalRelicsIntroduction.name)
        do {
            guard let pluck = try DataBase.dataBase?.pluck(filter) else {
                return nil
            }
            return  Introduction(idForDataBase: pluck[cuturalRelicsIntroduction.id],
                                 image: pluck[cuturalRelicsIntroduction.photo],
                                 title: pluck[cuturalRelicsIntroduction.name],
                                 text: pluck[cuturalRelicsIntroduction.introduction],
                                 date: pluck[cuturalRelicsIntroduction.remark])
        } catch {
            assertionFailure()
        }
        return nil
    }
}

// MARK: - Insert
extension DataBase {
    //插入文物介绍
    @discardableResult
    func insertCulturalRelicsIntroduction(with intro: Introduction) -> (Int64?, String?) {
        do {
            if (try DataBase.dataBase?.pluck(cuturalRelicsIntroduction.table.filter(cuturalRelicsIntroduction.id == intro.idForDataBase))) != nil {
                return (nil, "the cultural relics exsit")
            }
            let insert = cuturalRelicsIntroduction.table.insert(cuturalRelicsIntroduction.name <- intro.title,
                                                                cuturalRelicsIntroduction.id <- intro.idForDataBase,
                                                                cuturalRelicsIntroduction.introduction <- intro.text,
                                                                cuturalRelicsIntroduction.photo <- intro.image,
                                                                cuturalRelicsIntroduction.remark <- intro.date)
            let insertIntroduction = try? DataBase.dataBase?.run(insert)
            return (insertIntroduction, "inserted successfully")
        } catch {
            assertionFailure()
        }
        return(nil, "inserted unsuccessfully")
    }
}

// MARK: - Delete
extension DataBase {
    //删除文物介绍
    @discardableResult
    func deletetCulturalRelicsIntroduction(with id: Int64) -> (Int?, String?) {
        let filter = cuturalRelicsIntroduction.table.filter(id == cuturalRelicsIntroduction.id)
        do {
            let delete = try DataBase.dataBase?.run(filter.delete())
            return (delete, "deleted successfully")
        } catch {
            assertionFailure()
        }
        return (nil, "deleted unsuccessfully")
    }
    @discardableResult
    func deletetCulturalRelicsIntroduction(with name: String) -> (Int?, String?) {
        let filter = cuturalRelicsIntroduction.table.filter(name == cuturalRelicsIntroduction.name)
        do {
            let deleteIntroduction = try DataBase.dataBase?.run(filter.delete())
            return (deleteIntroduction, "deleted successfully")
        } catch {
            assertionFailure()
        }
        return (nil, "deleted unsuccessfully")
    }
}

// MARK: - Update
extension DataBase {
    //修改文物介绍数据
    func update(_ intro: Introduction) -> (Int?, String?) {
        guard (try? DataBase.dataBase?.pluck(cuturalRelicsIntroduction.table.filter(cuturalRelicsIntroduction.id == intro.idForDataBase))) != nil else {
            return (nil, "the cultural relics not exsit")
        }
        do {
            let update = cuturalRelicsIntroduction.table.update(cuturalRelicsIntroduction.name <- intro.title,
                                                                cuturalRelicsIntroduction.id <- intro.idForDataBase,
                                                                cuturalRelicsIntroduction.introduction <- intro.text,
                                                                cuturalRelicsIntroduction.photo <- intro.image,
                                                                cuturalRelicsIntroduction.remark <- intro.date)
            let updateIntroduction = try DataBase.dataBase?.run(update)
            return (updateIntroduction, "updated successfully")
        } catch {
            assertionFailure()
        }
        return (nil, "updated unsuccessfully")
    }
}

建表示例

//
//  CulturalRelicsIntroduction.swift
//  RunInto
//
//  Created by 张赛东(手机:15674119605) on 2021/3/3.
//  Copyright © 2021 adong666666. All rights reserved.
//

import Foundation
import SQLite

class CulturalRelicsIntroduction {
    let table = Table("CulturalRelicsIntroduction")
    let id = Expression<Int64>("id")
    let name = Expression<String>("name")
    let introduction = Expression<String>("introduction")
    let photo = Expression<String>("photo")
    let remark = Expression<String>("remark")
}
extension CulturalRelicsIntroduction {
    func setupTable() {
        do {
            guard let cmd = createTableCMD() else { return }
            try DataBase.dataBase?.run(cmd)
        } catch { print(error) }
    }
    func createTableCMD() -> String? {
        return table.create(ifNotExists: true) {
            $0.column(id, primaryKey: true)
            $0.column(name)
            $0.column(introduction)
            $0.column(photo)
            $0.column(remark)
        }
    }
}

使用示例

在合适的地方调用

DataBase.shared.insertCulturalRelicsIntroduction(with: intro!)
Help(show: $showContent, datas: DataBase.shared.queryCulturalRelicsIntroduction())

查看sqlite文件

下载真机的沙盒数据,查看后缀名为.sqlite的文件,即为生成的数据库,在应用商店搜“sqlite”,有很多软件可以查看

导出的表

id name introduction photo remark
20210303063005 bottle 郎窑红釉穿带直口瓶,清康熙,高20.8cm,口径6.1cm,足径9.1cm。瓶直口,长颈,垂腹,圈足外撇。足外墙两侧各有一长方形穿孔,可穿系绳带。在容器上系带是对无梁、无系、无扳手的器物进行提拿的传统方法,拆卸容易而又非常实用,也可以使器物在摆放位置上固定,不致被损坏。 郎窑红釉穿带直口瓶 故宫镇馆之宝
20210303063006 box 张成是元代雕漆大家,其传世作品被一致认为是雕漆作品里的珍品。张成造款雕漆云纹盘为故宫漆器的代表作品。高3.3cm,口径19.2cm.盘木胎黑漆,内外均雕云纹。堆漆甚厚,晶莹照人,刻工圆润。从此件具款的剔犀圆盘可知张成不仅是剔红高手,剔犀技巧也精湛至极,此盘为研究元代剔犀工艺提供了实例。 张成造款雕漆云纹盒 故宫镇馆之宝
20210303063007 clock 黑漆彩绘楼阁群仙祝寿钟为故宫钟表的代表作。高185cm,面宽102cm,侧宽70cm.此钟共有7套机械系统,分别控制走时、报时、景箱内的活动装置等,技术水准相当高。根据记录,从乾隆八年接旨着手设计到十四年完工,历时五年多。 彩漆描金楼阁式自开门群仙祝寿御制钟 故宫镇馆之宝
20210303063008 cup 宫廷之宝乾隆款金瓯永固杯为故宫宫廷文物的代表作。高12.5厘米,口径8厘米,足高5厘米,口边刻有回纹。根据清“内务府活计档”记载,乾隆皇帝对此杯的制作十分重视,不仅调用内库黄金、珍珠、宝石等珍贵材料,而且精工细作,曾多次修改,直至皇帝满意为止。因此,该杯一直被清代皇帝视为珍贵的祖传法宝。 乾隆款金瓯永固杯 故宫镇馆之宝
20210303063009 ear_furnace 掐丝珐琅缠枝莲纹象耳炉,元,通高13.9cm,口径16cm,足径13.5cm。清宫旧藏。炉铜胎,圆形,鼓腹,象首卷鼻耳,圈足。炉颈部浅蓝釉地,饰黄、白、红、紫四色菊花12朵。腹部宝蓝釉地,饰红、白、黄三色掐丝珐琅缠枝莲花6朵。其下饰莲瓣纹一周。 掐丝珐琅缠枝莲纹象耳炉 故宫镇馆之宝
20210303063010 grain_furnace 青玉云龙纹炉为故宫玉器的代表作品。宋代出品,高7.9cm,口径12.8cm.炉青玉质。通体以“工”字纹为底,上饰游龙、祥云和海水纹。器内底阴刻乾隆七言诗一首:“何年庙器赞天经,刻作飞龙殿四灵。毛伯邢侯异周制,祖丁父癸似商形。依然韫匵阅桑海,所惜从薪遇丙叮土气羊脂胥变幻,只余云水淡拖青。” 青玉云龙纹炉 故宫镇馆之宝
20210303063011 painting 《清明上河图》为故宫书画代表作品,该画为张择端所作,以精致的工笔记录了北宋末叶、徽宗时代首都汴京(今开封)郊区和城内汴河两岸的建筑和民生。全图分为三个段落。作品以长卷形式,采用散点透视的构图法,将繁杂的景物纳入统一而富于变化的画面中。在5米多长的画卷里,共绘了550多个各色人物。 清明上河图 故宫镇馆之宝
20210303063012 placard 西晋陆机的《平复帖》是故宫法帖的代表作品,也是目前存世最早的名人墨迹,内容为陆机向朋友问候疾病的书札。 平复帖 故宫镇馆之宝
20210303063013 zun 青铜之宝酗亚方尊为故宫青铜器的代表作品。青铜器的产生是古代中国从野蛮时代走向文明时代的重要标志之一。尊是盛酒器,流行于商早期至春秋战国时期。方尊传世较少。上世纪70年代在山东益都苏埠屯出土了几件带有亚铭文的青铜器,从挖掘的墓穴来看,规模都不小,加上众多带有亚铭记的器物,说明它们所代表的可能是一个大族。 酗亚方尊 故宫镇馆之宝
20210303063014 magpie 沈子蕃缂丝《梅鹊图》轴为故宫织绣的代表作品。图轴纵104cm,宽36cm.中国古代缂丝被认为是丝织工艺中最为高贵的品种,古人以“一寸缂丝一寸金”言缂丝作品之珍贵。缂丝之高贵,首先因其耗费工时巨大,以万缕千丝成其工巧,其次,缂技易学难精,虽摹缂书画,并非简单的照葫芦画瓢。 沈子蕃缂丝《梅鹊图》轴 故宫镇馆之宝

导出的JSON

[
  {
    "photo" : "郎窑红釉穿带直口瓶",
    "remark" : "故宫镇馆之宝",
    "name" : "bottle",
    "introduction" : "郎窑红釉穿带直口瓶,清康熙,高20.8cm,口径6.1cm,足径9.1cm。瓶直口,长颈,垂腹,圈足外撇。足外墙两侧各有一长方形穿孔,可穿系绳带。在容器上系带是对无梁、无系、无扳手的器物进行提拿的传统方法,拆卸容易而又非常实用,也可以使器物在摆放位置上固定,不致被损坏。",
    "id" : 20210303063005
  },
  {
    "id" : 20210303063006,
    "remark" : "故宫镇馆之宝",
    "photo" : "张成造款雕漆云纹盒",
    "name" : "box",
    "introduction" : "张成是元代雕漆大家,其传世作品被一致认为是雕漆作品里的珍品。张成造款雕漆云纹盘为故宫漆器的代表作品。高3.3cm,口径19.2cm.盘木胎黑漆,内外均雕云纹。堆漆甚厚,晶莹照人,刻工圆润。从此件具款的剔犀圆盘可知张成不仅是剔红高手,剔犀技巧也精湛至极,此盘为研究元代剔犀工艺提供了实例。"
  },
  {
    "id" : 20210303063007,
    "introduction" : "黑漆彩绘楼阁群仙祝寿钟为故宫钟表的代表作。高185cm,面宽102cm,侧宽70cm.此钟共有7套机械系统,分别控制走时、报时、景箱内的活动装置等,技术水准相当高。根据记录,从乾隆八年接旨着手设计到十四年完工,历时五年多。",
    "photo" : "彩漆描金楼阁式自开门群仙祝寿御制钟",
    "remark" : "故宫镇馆之宝",
    "name" : "clock"
  },
  {
    "name" : "cup",
    "photo" : "乾隆款金瓯永固杯",
    "introduction" : "宫廷之宝乾隆款金瓯永固杯为故宫宫廷文物的代表作。高12.5厘米,口径8厘米,足高5厘米,口边刻有回纹。根据清“内务府活计档”记载,乾隆皇帝对此杯的制作十分重视,不仅调用内库黄金、珍珠、宝石等珍贵材料,而且精工细作,曾多次修改,直至皇帝满意为止。因此,该杯一直被清代皇帝视为珍贵的祖传法宝。",
    "id" : 20210303063008,
    "remark" : "故宫镇馆之宝"
  },
  {
    "photo" : "掐丝珐琅缠枝莲纹象耳炉",
    "remark" : "故宫镇馆之宝",
    "introduction" : "掐丝珐琅缠枝莲纹象耳炉,元,通高13.9cm,口径16cm,足径13.5cm。清宫旧藏。炉铜胎,圆形,鼓腹,象首卷鼻耳,圈足。炉颈部浅蓝釉地,饰黄、白、红、紫四色菊花12朵。腹部宝蓝釉地,饰红、白、黄三色掐丝珐琅缠枝莲花6朵。其下饰莲瓣纹一周。",
    "id" : 20210303063009,
    "name" : "ear_furnace"
  },
  {
    "id" : 20210303063010,
    "remark" : "故宫镇馆之宝",
    "name" : "grain_furnace",
    "introduction" : "青玉云龙纹炉为故宫玉器的代表作品。宋代出品,高7.9cm,口径12.8cm.炉青玉质。通体以“工”字纹为底,上饰游龙、祥云和海水纹。器内底阴刻乾隆七言诗一首:“何年庙器赞天经,刻作飞龙殿四灵。毛伯邢侯异周制,祖丁父癸似商形。依然韫匵阅桑海,所惜从薪遇丙叮土气羊脂胥变幻,只余云水淡拖青。”",
    "photo" : "青玉云龙纹炉"
  },
  {
    "remark" : "故宫镇馆之宝",
    "photo" : "清明上河图",
    "id" : 20210303063011,
    "introduction" : "《清明上河图》为故宫书画代表作品,该画为张择端所作,以精致的工笔记录了北宋末叶、徽宗时代首都汴京(今开封)郊区和城内汴河两岸的建筑和民生。全图分为三个段落。作品以长卷形式,采用散点透视的构图法,将繁杂的景物纳入统一而富于变化的画面中。在5米多长的画卷里,共绘了550多个各色人物。",
    "name" : "painting"
  },
  {
    "photo" : "平复帖",
    "introduction" : "西晋陆机的《平复帖》是故宫法帖的代表作品,也是目前存世最早的名人墨迹,内容为陆机向朋友问候疾病的书札。",
    "name" : "placard",
    "remark" : "故宫镇馆之宝",
    "id" : 20210303063012
  },
  {
    "id" : 20210303063013,
    "photo" : "酗亚方尊",
    "name" : "zun",
    "introduction" : "青铜之宝酗亚方尊为故宫青铜器的代表作品。青铜器的产生是古代中国从野蛮时代走向文明时代的重要标志之一。尊是盛酒器,流行于商早期至春秋战国时期。方尊传世较少。上世纪70年代在山东益都苏埠屯出土了几件带有亚铭文的青铜器,从挖掘的墓穴来看,规模都不小,加上众多带有亚铭记的器物,说明它们所代表的可能是一个大族。",
    "remark" : "故宫镇馆之宝"
  },
  {
    "id" : 20210303063014,
    "name" : "magpie",
    "photo" : "沈子蕃缂丝《梅鹊图》轴",
    "introduction" : "沈子蕃缂丝《梅鹊图》轴为故宫织绣的代表作品。图轴纵104cm,宽36cm.中国古代缂丝被认为是丝织工艺中最为高贵的品种,古人以“一寸缂丝一寸金”言缂丝作品之珍贵。缂丝之高贵,首先因其耗费工时巨大,以万缕千丝成其工巧,其次,缂技易学难精,虽摹缂书画,并非简单的照葫芦画瓢。",
    "remark" : "故宫镇馆之宝"
  }
]

导出的插入语句

BEGIN;

INSERT INTO CulturalRelicsIntroduction(id, name, introduction, photo, remark) VALUES(20210303063005, 'bottle', '郎窑红釉穿带直口瓶,清康熙,高20.8cm,口径6.1cm,足径9.1cm。瓶直口,长颈,垂腹,圈足外撇。足外墙两侧各有一长方形穿孔,可穿系绳带。在容器上系带是对无梁、无系、无扳手的器物进行提拿的传统方法,拆卸容易而又非常实用,也可以使器物在摆放位置上固定,不致被损坏。', '郎窑红釉穿带直口瓶', '故宫镇馆之宝');
INSERT INTO CulturalRelicsIntroduction(id, name, introduction, photo, remark) VALUES(20210303063006, 'box', '张成是元代雕漆大家,其传世作品被一致认为是雕漆作品里的珍品。张成造款雕漆云纹盘为故宫漆器的代表作品。高3.3cm,口径19.2cm.盘木胎黑漆,内外均雕云纹。堆漆甚厚,晶莹照人,刻工圆润。从此件具款的剔犀圆盘可知张成不仅是剔红高手,剔犀技巧也精湛至极,此盘为研究元代剔犀工艺提供了实例。', '张成造款雕漆云纹盒', '故宫镇馆之宝');
INSERT INTO CulturalRelicsIntroduction(id, name, introduction, photo, remark) VALUES(20210303063007, 'clock', '黑漆彩绘楼阁群仙祝寿钟为故宫钟表的代表作。高185cm,面宽102cm,侧宽70cm.此钟共有7套机械系统,分别控制走时、报时、景箱内的活动装置等,技术水准相当高。根据记录,从乾隆八年接旨着手设计到十四年完工,历时五年多。', '彩漆描金楼阁式自开门群仙祝寿御制钟', '故宫镇馆之宝');
INSERT INTO CulturalRelicsIntroduction(id, name, introduction, photo, remark) VALUES(20210303063008, 'cup', '宫廷之宝乾隆款金瓯永固杯为故宫宫廷文物的代表作。高12.5厘米,口径8厘米,足高5厘米,口边刻有回纹。根据清“内务府活计档”记载,乾隆皇帝对此杯的制作十分重视,不仅调用内库黄金、珍珠、宝石等珍贵材料,而且精工细作,曾多次修改,直至皇帝满意为止。因此,该杯一直被清代皇帝视为珍贵的祖传法宝。', '乾隆款金瓯永固杯', '故宫镇馆之宝');
INSERT INTO CulturalRelicsIntroduction(id, name, introduction, photo, remark) VALUES(20210303063009, 'ear_furnace', '掐丝珐琅缠枝莲纹象耳炉,元,通高13.9cm,口径16cm,足径13.5cm。清宫旧藏。炉铜胎,圆形,鼓腹,象首卷鼻耳,圈足。炉颈部浅蓝釉地,饰黄、白、红、紫四色菊花12朵。腹部宝蓝釉地,饰红、白、黄三色掐丝珐琅缠枝莲花6朵。其下饰莲瓣纹一周。', '掐丝珐琅缠枝莲纹象耳炉', '故宫镇馆之宝');
INSERT INTO CulturalRelicsIntroduction(id, name, introduction, photo, remark) VALUES(20210303063010, 'grain_furnace', '青玉云龙纹炉为故宫玉器的代表作品。宋代出品,高7.9cm,口径12.8cm.炉青玉质。通体以“工”字纹为底,上饰游龙、祥云和海水纹。器内底阴刻乾隆七言诗一首:“何年庙器赞天经,刻作飞龙殿四灵。毛伯邢侯异周制,祖丁父癸似商形。依然韫匵阅桑海,所惜从薪遇丙叮土气羊脂胥变幻,只余云水淡拖青。”', '青玉云龙纹炉', '故宫镇馆之宝');
INSERT INTO CulturalRelicsIntroduction(id, name, introduction, photo, remark) VALUES(20210303063011, 'painting', '《清明上河图》为故宫书画代表作品,该画为张择端所作,以精致的工笔记录了北宋末叶、徽宗时代首都汴京(今开封)郊区和城内汴河两岸的建筑和民生。全图分为三个段落。作品以长卷形式,采用散点透视的构图法,将繁杂的景物纳入统一而富于变化的画面中。在5米多长的画卷里,共绘了550多个各色人物。', '清明上河图', '故宫镇馆之宝');
INSERT INTO CulturalRelicsIntroduction(id, name, introduction, photo, remark) VALUES(20210303063012, 'placard', '西晋陆机的《平复帖》是故宫法帖的代表作品,也是目前存世最早的名人墨迹,内容为陆机向朋友问候疾病的书札。', '平复帖', '故宫镇馆之宝');
INSERT INTO CulturalRelicsIntroduction(id, name, introduction, photo, remark) VALUES(20210303063013, 'zun', '青铜之宝酗亚方尊为故宫青铜器的代表作品。青铜器的产生是古代中国从野蛮时代走向文明时代的重要标志之一。尊是盛酒器,流行于商早期至春秋战国时期。方尊传世较少。上世纪70年代在山东益都苏埠屯出土了几件带有亚铭文的青铜器,从挖掘的墓穴来看,规模都不小,加上众多带有亚铭记的器物,说明它们所代表的可能是一个大族。', '酗亚方尊', '故宫镇馆之宝');
INSERT INTO CulturalRelicsIntroduction(id, name, introduction, photo, remark) VALUES(20210303063014, 'magpie', '沈子蕃缂丝《梅鹊图》轴为故宫织绣的代表作品。图轴纵104cm,宽36cm.中国古代缂丝被认为是丝织工艺中最为高贵的品种,古人以“一寸缂丝一寸金”言缂丝作品之珍贵。缂丝之高贵,首先因其耗费工时巨大,以万缕千丝成其工巧,其次,缂技易学难精,虽摹缂书画,并非简单的照葫芦画瓢。', '沈子蕃缂丝《梅鹊图》轴', '故宫镇馆之宝');

COMMIT;

文章作者: 张赛东
文章链接: https://zsd.name
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 张赛东 !
评论
  目录