SQLite.swift使用

SQLite.swift使用

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

数据库代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
//
// 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")
}
}

建表示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
//
// 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)
}
}
}

使用示例

在合适的地方调用

1
DataBase.shared.insertCulturalRelicsIntroduction(with: intro!)
1
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
[
{
"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" : "故宫镇馆之宝"
}
]

导出的插入语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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;