// 基本步骤
// 1. 打开数据库
// 2. 处理数据
// 3. 关闭数据库
//先设置全局变量 lazy var documentsPath: String = { let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) return paths.first! }() //指针 var db: OpaquePointer? = nil var stmt: OpaquePointer? = nil
// 创建或打开数据库 func createOrOpenDatabase() { print("\(NSHomeDirectory())") //创建数据库文件路径,并要改成UTF-8类型 let path: NSString = "\(documentsPath)/test.sqlite3" as NSString let filename = path.utf8String //判断打开数据库是否成功(若没有数据库,会自动生成),不成功则打印输入"create or open failed..."并关闭数据库 if sqlite3_open(filename, &db) != SQLITE_OK { print("create or open failed...") sqlite3_close(db) } } // 创建学生表 func createTable() { //拼接sql语句并转为UTF-8 let string: NSString = "create table if not exists Student(id integer primary key autoincrement, sno text, name text, score integer)" let sql = string.utf8String //执行sql语句 if sqlite3_exec(db, sql, nil, nil, nil) != SQLITE_OK { print("create table failed...") sqlite3_close(db) } } //slq的新增操作 func insertStudent(sno: String, name: String, score: Int) { // 准备SQL语句 let string: NSString = "insert into Student(sno, name, score) values(?, ?, ?)" let sql = string.utf8String // 解析SQL文本语句 //sqlite3_prepare_v2解析 //参数1:当前数据库指针 //参数2:要解析的sql语句(默认以0结束) //参数3:因为sql语句默认以0结束,为了出去那个0,所以是-1 //参数4:另外一个指针用于解析后存储,最后一个参数忘了,你直接写nil就可以了 if sqlite3_prepare_v2(db, sql, -1, &stmt, nil) != SQLITE_OK { sqlite3_close(db) print("\(sno), insert failed...") } // 绑定参数 let csno = (sno as NSString).utf8String let cname = (name as NSString).utf8String sqlite3_bind_text(stmt, 1, csno, -1, nil) sqlite3_bind_text(stmt, 2, cname, -1, nil) sqlite3_bind_int(stmt, 3, Int32(score)) // 执行SQL语句 if sqlite3_step(stmt) == SQLITE_ERROR { sqlite3_close(db) print("\(sno), insert failed...") } else { // 释放资源 sqlite3_finalize(stmt) } } // 修改学生数据 func updateStudent() { // 准备SQL语句 let string: NSString = "update Student set score = 100 where name like ‘a%‘" let sql = string.utf8String // 执行SQL语句 //sqlite3_exec后面的三个参数可以不用关,就写nil就可以了 if sqlite3_exec(db, sql, nil, nil, nil) != SQLITE_OK { sqlite3_close(db) print("update failed...") } } // 删除学生数据 func deleteStudents() { // 准备SQL语句 let string: NSString = "delete from Student where score < 60" let sql = string.utf8String // 执行SQL语句 if sqlite3_exec(db, sql, nil, nil, nil) != SQLITE_OK { sqlite3_close(db) print("delete failed...") } }
总结:
增删改(如果没有参数,则第2,3步都不用写)
1:准备sql语句
如:let string: NSString = "insert into Student(sno, name, score) values(?, ?, ?)"
2:解析sql语句 如:sqlite3_prepare_v2(db, sql, -1, &stmt, nil)
3:绑定参数
如:let csno = (sno as NSString).utf8String
sqlite3_bind_text(stmt, 1, csno, -1, nil)
4执行语句 如:sqlite3_step(stmt)
5:释放资源 如:sqlite3_finalize(stmt)
查询
1:准备sql语句
2:解析sql语句
3: 执行SQL语句
获取每条记录的数据(某些字符类型还要转换才能显示你要的结果)
sqlite3_column_text(stmt, 0)
4:释放资源
时间: 2024-08-09 13:48:57