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;