Swift学习第九q之SQLite的使用

Swift学习第九q之SQLite的使用,第1张

概述前面写了一部分关于Swift的语法学习,今天要学习的是关于IOS中数据存储的一种存储方式之SQLite的使用。就Swift中 *** 作SQLite的方法做一下,一是巩固知识点,二是为学习Swift的小伙伴提供点学习使用的SQLite的思路。扯了半会蛋了,现在言归正传,开始今天的讲解。 Swift *** 作SQLite的流程有如下的几个步骤: - 建立桥接文件 - 添加library-libsqlite3.0.

前面写了一部分关于Swift的语法学习,今天要学习的是关于IOS中数据存储的一种存储方式之sqlite的使用。就Swift中 *** 作sqlite的方法做一下,一是巩固知识点,二是为学习Swift的小伙伴提供点学习使用的sqlite的思路。扯了半会蛋了,现在言归正传,开始今天的讲解。

Swift *** 作sqlite的流程有如下的几个步骤:
- 建立桥接文件
- 添加library-libsqlite3.0.tbd
- 创建数据库管理工具类DBManager
- *** 作数据库的简单例子

1.建立桥接文件

1.1在用Swift使用OC中得类文件的时候,需要进行桥接,首先建一个.h的头文件。
注意:桥接文件的命名规则:项目名-BrIDging-header.Swift

#import "sqlite3.h"

1.2 在Build-settings -> Swift ComplIEr - Code Generaton —>Objective C BrIDing Herder中添加自己的桥接文件。
如下图:
这样的话,桥接文件已经OK。

2.添加library-libsqlite3.0.tbd

在General - linking frameworks And library中添加library-libsqlite3.0.tbd。

这样就表示已经添加成功。

3.用swift实现数据库管理工具类DBManager.Swift
//// DBManager.swift// HelloSwfit//// Created by lIDong on 16/5/22.// copyright © 2016年 lIDong. All rights reserved.///** *数据库管理 */class DBManager {    var db: copaquePointer = nil    private static let instance = DBManager()    // 单例 全局的数据访问接口    class var sharedInstance: DBManager    {        return instance    }    //打开数据库    func openDatabase(dbname: String) -> Bool    {        let documentPaths = NSSearchPathForDirectorIEsInDomains(NSSearchPathDirectory.documentDirectory,NSSearchPathDomainMask.UserDomainMask,true)        let documnetPath = documentPaths[0]        print("documnetPath= \(documnetPath)")        let error = sqlite3_open(documnetPath+dbname,&db)        if error != sqlITE_OK {            print("sqliteDB - Failed to open DB!")            sqlite3_close(db)        }        return error == sqlITE_OK    }    //创建数据库表    func createtable() -> Bool    {        let sql =            "CREATE table IF NOT EXISTS T_Employee ( \n" +            "'ID' INTEGER NOT NulL PRIMARY KEY autoINCREMENT,\n" +            "'name' TEXT NOT NulL,\n" +            "'age' TEXT NOT NulL,\n" +            "'department_ID' TEXT );"        // 返回结果        return sqlite3_exec(db,sql.cStringUsingEnCoding(NSUTF8StringEnCoding)!,nil,nil) == sqlITE_OK    }    //执行sql (插入,修改,删除)    func execsql(sql: String) -> Bool    {        // 返回结果       let d =  sqlite3_exec(db,nil) == sqlITE_OK        return d    }    func closeDb() -> Bool {        return sqlite3_close(db) == sqlITE_OK    }    func selectAll(sql:String) -> Array<Employee> {        var mArrs:Array<Employee> = []        var stmt: copaquePointer = nil        if sqlite3_prepare_v2(db, -1,&stmt,nil) == sqlITE_OK {            while sqlite3_step(stmt) == sqlITE_ROW {                let e = Employee()                let ID1 =  sqlite3_column_int(stmt, 0)                print("ID = \(ID1)")                let chars = UnsafePointer<CChar>(sqlite3_column_text(stmt, 1))                let str = String(CString: chars,enCoding: NSUTF8StringEnCoding)!                print("name \(str)")                let chars1 = UnsafePointer<CChar>(sqlite3_column_text(stmt, 2))                let str1 = String(CString: chars1,enCoding: NSUTF8StringEnCoding)!                print("年龄 \(str1)")                e.ID = ID1                e.name = str                e.age = str1                mArrs.append(e)            }            sqlite3_finalize(stmt)            closeDb()        }        return mArrs    }    /// 执行 sql 返回一个结果集(对象数组)    ///    /// :param: sql sql 字符串    func recordSet(sql: String) {        // 1. 准备语句        var stmt: copaquePointer = nil        /** 1. 数据库句柄 2. sql 的 C 语言的字符串 3. sql 的 C 语言的字符串长度 strlen,-1 会自动计算 4. stmt 的指针 5. 通常传入 nil */        if sqlite3_prepare_v2(db,nil) == sqlITE_OK {            // 单步获取sql执行的结果 -> sqlite3_setup 对应一条记录            while sqlite3_step(stmt) == sqlITE_ROW {                // 获取每一条记录的数据                recordData(stmt)            }        }    }    /// 获取每一条数据的记录    ///    /// :param: stmt prepared_statement 对象    func recordData(stmt: copaquePointer) {        // 获取到记录        let count = sqlite3_column_count(stmt)        print("获取到记录,共有多少列 \(count)")        // 遍历每一列的数据        for i in 0..<count {            let type = sqlite3_column_type(stmt,i)            // 根据字段的类型,提取对应列的值            switch type {            case sqlITE_INTEGER:                print("整数 \(sqlite3_column_int64(stmt,i))")            case sqlITE_float:                print("小数 \(sqlite3_column_double(stmt,i))")            case sqlITE_NulL:                print("空 \(NSNull())")            case sqlITE_TEXT:                let chars = UnsafePointer<CChar>(sqlite3_column_text(stmt,i))                let str = String(CString: chars,enCoding: NSUTF8StringEnCoding)!                print("字符串 \(str)")            case let type:                print("不支持的类型 \(type)")            }        }    }}
4. *** 作数据库的简单用例
//// sqliteVIEwController.swift// HelloSwfit//// Created by lIDong on 16/5/22.// copyright © 2016年 lIDong. All rights reserved.//import UIKit/// sqlite的使用class sqliteVIEwController: UIVIEwController {        /// 数据库名    let db_name = "/data.db3"    @IBOutlet weak var btn_submit: UIbutton!    @IBOutlet weak var age: UITextFIEld!    @IBOutlet weak var select: UIbutton!    @IBOutlet weak var name: UITextFIEld!    var dbManager : DBManager = DBManager.sharedInstance    overrIDe init(nibname nibnameOrNil: String?,bundle nibBundleOrNil: NSBundle?) {        super.init(nibname: nibnameOrNil,bundle: nibBundleOrNil)           print(nibname);    }    /** 加载xib - returns: <#return value description#> */    convenIEnce init() {        let nibnameOrNil = String?("sqliteVIEwController")        self.init(nibname: nibnameOrNil,bundle: nil)    }    required init?(coder aDecoder: NSCoder) {        fatalError("init(coder:) has not been implemented")    }    overrIDe func vIEwDIDLoad() {        super.vIEwDIDLoad()        self.Title = "sqlite学习"        let ddq = dbManager.openDatabase(db_name)        print("数据打开\(ddq)")        let sucess = dbManager.createtable()        print("表创建=\(sucess)")        self.btn_submit.addTarget(self,action:#selector( sqliteVIEwController.submitAge(_:)),forControlEvents: .touchUpInsIDe)        self.btn_submit.backgroundcolor = UIcolor.bluecolor()        self.select.addTarget(self,action:#selector( sqliteVIEwController.selectAllEmp(_:)),forControlEvents: .touchUpInsIDe)    }    /** 提交雇员信息 - parameter btn: <#btn description#> */    func submitAge(btn:UIbutton)  {        let username:String! = self.name.text        let  age_:String! = self.age.text        if (username != nil && age_ != nil){            let sql = "insert into T_Employee(name,age) values('\(self.name.text!)','\(self.age.text!)')"            print("sql: \(sql)")            let items =  dbManager.execsql(sql)            Util.showToast(self,message: "插入 = \(items)")        }else{            Util.showToast(self,message: "输入框不能为空")            return        }    }    /** 查询所有雇员 - parameter btn: <#btn description#> */    func selectAllEmp(btn:UIbutton)  {        let sql = "select * from T_Employee"        let items =  dbManager.selectAll(sql)            Util.showToast(self,message: "总数 = \(items.count)")    }    /** 更新用户信息 - parameter btn: 按钮 - parameter en: 雇员 */    func UpDateRmp(btn:UIbutton,en:Employee)  {        let sql = "update T_Employee set name = 'kkkk',age = '10' where ID = 5"        let items =  dbManager.execsql(sql)        Util.showToast(self,message: "更新 = \(items)")    }    overrIDe func dIDReceiveMemoryWarning() {        super.dIDReceiveMemoryWarning()        // dispose of any resources that can be recreated.    }}

总结:sqlIte的学习基本就是从这四个步骤来实现。有疑问可以,在下面评论。

代码地址:

@H_404_322@ 总结

以上是内存溢出为你收集整理的Swift学习第九q之SQLite的使用全部内容,希望文章能够帮你解决Swift学习第九q之SQLite的使用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1075325.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存