zoukankan      html  css  js  c++  java
  • sqlite的增删改查

    // 基本步骤
    // 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:释放资源
  • 相关阅读:
    The Single Responsibility Principle
    MSComDlg.CommonDialogserver不能创建对象错误的解决
    Hadoop的HA机制(Zookeeper集群+Hadoop集群)配置记录
    linux怎样查看port被谁占用
    hadoop配置说明
    C#中的继承与多态还有接口
    MySQL DATE_FORMAT() 函数
    MySQL处理数据库和表的常用命令
    mysql 增加用户
    sql2008连接数据库问题
  • 原文地址:https://www.cnblogs.com/LarryBlogger/p/6186559.html
Copyright © 2011-2022 走看看