sqlitesqlite的增删改查

// 基本步骤

// 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:释放资源

网站地图xml地图