作者:乳酪杳杳 | 来源:互联网 | 2023-05-16 04:01
一、添加”libsqlite3.dylib”库文件写一个头文件SQLite_Bridge.h将SQLite连接二、代码结构三、代码实现1.AppDelegate.swiftimport
一、添加”libsqlite3.dylib”库文件
写一个头文件SQLite_Bridge.h
将SQLite连接
二、代码结构
三、代码实现
1.AppDelegate.swift
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
let flag = SQLiteManager.shareInstance().openDB()
if flag {
print("打开数据库成功")
}
return true
}
}
2.ViewController.swift
import UIKit
/*
0.封装一个工具类,管理SQLite的数据库(单例)
1.创建数据库(文件)
2.创建表,用于存储数据
3.基本操作(增删改)
4.查询数据
*/
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
override func touchesBegan(touches: Set, withEvent event: UIEvent?) {
SQLiteManager.shareInstance().beginTransaction()
let time = CFAbsoluteTimeGetCurrent()
for _ in 0..<10000 {
let name = "ls\(arc4random_uniform(20))"
let age = Int(arc4random_uniform(10) + 15)
let stu = Student(age: age, name: name)
stu.insertStudent()
}
let end = CFAbsoluteTimeGetCurrent();
print(end - time)
SQLiteManager.shareInstance().commitTransaction()
}
func deleteData() {
let deleteSQL = "DELETE FROM t_student WHERE name = 'ls11';"
if SQLiteManager.shareInstance().execSQL(deleteSQL) {
print("删除成功")
}
}
func updateData() {
let updateSQL = "UPDATE t_student SET name = 'lmj' WHERE name = 'ls1';"
if SQLiteManager.shareInstance().execSQL(updateSQL) {
print("更新成功")
}
}
}
3.SQLiteManager.swift
import UIKit
class SQLiteManager: NSObject {
static let instance : SQLiteManager = SQLiteManager()
class func shareInstance() -> SQLiteManager {
return instance
}
var db : COpaquePointer = nil
func openDB() -> Bool {
var filePath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).first;
filePath = (filePath! as NSString).stringByAppendingPathComponent("my.sqlite")
let cFilePath = (filePath?.cStringUsingEncoding(NSUTF8StringEncoding))!
print(filePath)
if sqlite3_open(cFilePath, &db) != SQLITE_OK {
print("打开数据库失败");
return false
}
return createTable()
}
func createTable() -> Bool {
let createTableSQL = "CREATE TABLE IF NOT EXISTS 't_student' ('id' INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,'name' TEXT,'age' INTEGER);"
return execSQL(createTableSQL)
}
func execSQL(sql : String) -> Bool {
let cSQL = (sql.cStringUsingEncoding(NSUTF8StringEncoding))!
return sqlite3_exec(db, cSQL, nil, nil, nil) == SQLITE_OK
}
func querySQL(querySQL : String) -> [[String : AnyObject]]? {
var stmt : COpaquePointer = nil
let cQuerySQL = (querySQL.cStringUsingEncoding(NSUTF8StringEncoding))!
if sqlite3_prepare_v2(db, cQuerySQL, -1, &stmt, nil) != SQLITE_OK {
print("没有准备成功")
return nil
}
var tempArray = [[String : AnyObject]]()
let count = sqlite3_column_count(stmt)
while sqlite3_step(stmt) == SQLITE_ROW {
var dict = [String : AnyObject]()
for i in 0..
let cValue = UnsafePointer(sqlite3_column_text(stmt, i))
let value = String(CString: cValue, encoding: NSUTF8StringEncoding)!
let cKey = sqlite3_column_name(stmt, i)
let key = String(CString: cKey, encoding: NSUTF8StringEncoding)!
dict[key] = value
}
tempArray.append(dict)
}
return tempArray
}
func beginTransaction() {
execSQL("BEGIN TRANSACTION;")
}
func rollBackTransaction() {
execSQL("ROLLBACK TRANSACTION;")
}
func commitTransaction() {
execSQL("COMMIT TRANSACTION;")
}
}
4.Student.swift
import Foundation
class Student: NSObject {
var name : String?
var age : Int = 0
init(age : Int, name : String) {
self.name = name
self.age = age
}
init(dict : [String : AnyObject]) {
super.init()
self.setValuesForKeysWithDictionary(dict)
}
func insertStudent() {
let insertSQL = "INSERT INTO t_student (name, age) VALUES ('\(name!)', \(age));"
if SQLiteManager.shareInstance().execSQL(insertSQL) {
}
}
class func loadData() -> [Student]? {
let querySQL = "SELECT name, age FROM t_student WHERE age >= 20 ORDER BY age;"
let dictArray = SQLiteManager.shareInstance().querySQL(querySQL)
var tempArray = [Student]()
if let tempDictArray = dictArray {
for dict in tempDictArray {
tempArray.append(Student(dict: dict))
}
}
return tempArray
}
}
5.SQLite_Bridge.h
#import "SQLite3.h"