【iOS数据持久化1】SQLite
iOS数据持久化 SQLite
这里采用一个二次封装的实例来初步演示和实现
文章目录
准备
首先出门找大佬 ,下载资料:
https://github.com/bujiandi/Swift-UtilsFramework
https://github.com/bujiandi/SQLite-Base-Swift
如果嫌麻烦,这里放一个,建议github
https://download.****.net/download/reflection_/10856714
你将有这几个文件
其中data.db是database文件
让后组织进 project
最好放在最外面,使用时就不必添加子目录
修改 Building Settings -> Swift Compiler - General ->Objective-C Bridging Header
写成刚刚添加的 头文件名
使用方法
//1. 连接数据库
var db:SQLiteDB!
//2. 打开链接数据库
db = SQLiteDB.shared
_ = db.openDB() //不需要使用返回值
//使用SQL语句
let sqlRead = "SELECT * FROM student"
let data = db.query(sql: sqlRead) //返回一个字典,query 询问
let sqlInsert = "INSERT INTO student(stuID ,stuName) values('\(id)' ,'\(name)')"
_ = db.execute(sql: sqlInsert) // sql 执行
例子
import UIKit
struct StuInfo {
var stuID :String
var stuName :String
}
class ViewController: UIViewController ,UITableViewDelegate ,UITableViewDataSource{
@IBOutlet weak var tfStuID: UITextField!
@IBOutlet weak var tfStuName: UITextField!
@IBOutlet weak var tableViewStu: UITableView!
//1. 连接数据库
var db:SQLiteDB!
var arrStuINfo = [StuInfo]() //学生信息数组
override func viewDidLoad() {
super.viewDidLoad()
db = SQLiteDB.shared // 打开链接数据库
_ = db.openDB()
tableViewStu.delegate = self
tableViewStu.dataSource = self
readStuDataFromDB()
}
func readStuDataFromDB() { //读取数据信息
arrStuINfo.removeAll()
let sql = "SELECT * FROM student"
let data = db.query(sql: sql) //返回一个字典
print(data)
for item in data{
let id = item["stuID"] as! String
let name = item["stuName"] as! String
let si = StuInfo(stuID: id, stuName: name)
arrStuINfo.append(si)
}
}
@IBAction func btnDeletAction(_ sender: UIButton) {
arrStuINfo.removeAll()
let sql = "DELETE FROM student"
_ = db.execute(sql: sql) // sql 执行
self.tableViewStu.reloadData()
}
@IBAction func btnAddAction(_ sender: UIButton) {
let name = tfStuName.text!
let id = tfStuID.text!
let sql = "INSERT INTO student(stuID ,stuName) values('\(id)' ,'\(name)')"
_ = db.execute(sql: sql) // sql 执行
readStuDataFromDB()
tableViewStu.reloadData()
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return arrStuINfo.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell(style: .subtitle, reuseIdentifier: "cell")
cell.textLabel?.text = arrStuINfo[indexPath.row].stuName
cell.detailTextLabel?.text = arrStuINfo[indexPath.row].stuID
return cell
}
//删除
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete{
// arrStuINfo.remove(at: indexPath.row)
let stuid = arrStuINfo[indexPath.row].stuID
let sql = "DELETE FROM student WHERE stuID ='\(stuid)'"
_ = db.execute(sql: sql) // sql 执行
readStuDataFromDB()
tableView.reloadData() // 重新加载
}
}
}