数据持久化之SQLite数据库(SQLite.swift使用)
一、 简介
SQLite是一款轻型的嵌入式数据库,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就足够了。它的处理速度比Mysql、PostgreSQL这两款著名的数据库都还快。SQLite提供的是一些C函数接口,你可以用这些函数操作数据库。通过使用这些接口,传递一些标准 sql 语句(以 char * 类型)给 SQLite函数,SQLite就会为你操作数据库
一个数据库中的表就算是一个文件,一般是将这个文件放在沙盒Document目录下,文件后缀名一般为db(database)
SQLite.swift:他就是为了swift专业打造的一SQLite为基础的swift封装的第三方库,Github地址:https://github.com/stephencelis/SQLite.swift
二、 SQlite.swift的使用
首先还是要导入SQlite.swift库(导入方法自行百度),导入响应的二进制文件,还要导入数据库SQlite[重点],设置完成后的界面应该有如下图中红线部分
使用Sqlite.swift基本功能
//: Playground - noun: a place where people can play //使用SQLite之前记得要添加在工程属性Build Phases 选项,增加SQLite iOS到Target Dependencies中 //用于介绍SQlite.swift的基本使用地址https://github.com/stephencelis/SQLite.swift //详细使用地址:https://github.com/stephencelis/SQLite.swift/blob/master/Documentation/Index.md#sqliteswift-documentation import SQLite //**链接数据库 let db = try Connection("path/to/db.sqlite3")//与数据库连接(重点) //**定义表属性 let users = Table("users") //创建数据表名字 let id = Expression<Int64>("id") //定义表属性 let name = Expression<String?>("name") let email = Expression<String>("email") //**建表 try db.run(users.create { t in //创建表只需要产生一次,多次运行会报错 t.column(id, primaryKey: true) t.column(name) t.column(email, unique: true) }) // CREATE TABLE "users" ( // "id" INTEGER PRIMARY KEY NOT NULL, // "name" TEXT, // "email" TEXT NOT NULL UNIQUE // ) //*插入 let insert = users.insert(name <- "Alice", email <- "[email protected]") //插入的信息 let rowid = try db.run(insert)//返回插入的id //执行插入 // INSERT INTO "users" ("name", "email") VALUES ('Alice', '[email protected]') for user in try db.prepare(users) { //采用循环式使用(.prepare:表示准备执行某表某操作)//返回表行 print("id: \(user[id]), name: \(user[name]), email: \(user[email])") // id: 1, name: Optional("Alice"), email: [email protected] } //*选择 // SELECT * FROM "users" let alice = users.filter(id == rowid) //[filter:过滤] //查询(返回一个表不是行,无法直接输出)可以像操作数据表一样操作它(并且会同步到初始表)如果失败了,表的数量为0呗(db.scalar(alice.count) //0) //*更新 try db.run(alice.update(email <- email.replace("mac.com", with: "me.com")))//执行更新 // UPDATE "users" SET "email" = replace("email", 'mac.com', 'me.com') //这里还是部分更新 // WHERE ("id" = 1) //*删除 try db.run(alice.delete()) //执行删除 // DELETE FROM "users" WHERE ("id" = 1) db.scalar(users.count) // 0 //【scalar:数量】 //统计数据行数 // SELECT count(*) FROM "users" ////建议,实际使用,将部分代码(如建表)分开到另外的地方,将一些其他的数据变量化 /// SQLite.swift also works as a lightweight, Swift-friendly wrapper over the C API. //可以直接执行语句???? let stmt = try db.prepare("INSERT INTO users (email) VALUES (?)") for email in ["[email protected]", "[email protected]"] { try stmt.run(email) } db.totalChanges // 3 db.changes // 1 db.lastInsertRowid // 3 for row in try db.prepare("SELECT id, email FROM users") { print("id: \(row[0]), email: \(row[1])")//用下标代替列 // id: Optional(2), email: Optional("[email protected]") // id: Optional(3), email: Optional("[email protected]") } db.scalar("SELECT count(*) FROM users") // 2
提示:Sqlite数据库可以使用可视化工具MesaSQlite软件打开
SQlite.swift的使用Github介绍(详细):https://github.com/stephencelis/SQLite.swift/blob/master/Documentation/Index.md- sqliteswift-documentation
扩展链接:SQlite常用语句
时间: 2024-10-19 16:14:04