Swift版的SQLite帮助类

SQLiteHelper

创建SQLiteHelper类

///  SQLite数据库处理帮助类
///
///  此类中封装了关于SQLite数据库处理的业务函数
class SQLiteHelper
{
    // 业务代码...
}

单例

private static let instance = SQLiteHelper()
/// 单例  全局的数据访问接口
class var sharedInstance: SQLiteHelper
{
    return instance
}

全局变量

var db: COpaquePointer = nil

打开数据库

///  打开数据库
///
///  :param: dbName 数据库名称
///
///  :returns: 返回 是否打开成功
func openDatabase(dbName: String) -> Bool
{
    let path = dbName.documentPath()
    println(path)
    return sqlite3_open(path, &db) == SQLITE_OK
}

创建示例数据表

///  创建 T_Department 和 T_Employee 表
///
///  :returns: 返回 是否创建成功
func createTable() -> Bool
{
    let sql = "CREATE TABLE \n" +
        "IF NOT EXISTS T_Department (\n" +
        "id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,\n" +
        "DepartmentNo CHAR(10) NOT NULL DEFAULT ‘‘,\n" +
        "Name CHAR(50) NOT NULL DEFAULT ‘‘ \n" +
        "); \n" +
        "CREATE TABLE IF NOT EXISTS T_Employee ( \n" +
        "‘id‘ INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, \n" +
        "‘name‘ TEXT NOT NULL, \n" +
        "‘age‘ INTEGER NOT NULL, \n" +
        "‘department_id‘ INTEGER, \n" +
        "CONSTRAINT ‘FK_DEP_ID‘ FOREIGN KEY (‘department_id‘) REFERENCES ‘T_Department‘ (‘id‘) \n" +
    ");"
    // 返回结果
    return execSql(sql)
}

执行INSERT、UPDATE、DELETE 语句

///  执行INSERT、UPDATE、DELETE SQL语句
///
///  :param: sql SQL语句
///
///  :returns: 返回 是否执行成功
func execSql(sql: String) -> Bool
{
    // 返回结果
   return sqlite3_exec(db, sql.cStringUsingEncoding(NSUTF8StringEncoding)!, nil, nil, nil) == ITE_OK
}

执行SQL语句 返回结果数量

///  执行SQL语句 返回结果数量
///
///  :param: sql SQL语句
///
///  :returns: 返回 结果
func execCount(sql: String) -> Int
{
    let record = execRecordSet(sql)
    // 返回结果
    return (record[0] as! [AnyObject])[0] as! Int
}

执行返回单条记录

///  执行返回单条记录
///
///  :param: sql SQL语句
///
///  :returns: 返回 单条记录
func execRow(sql: String) -> [AnyObject]?
{
    let record = execRecordSet(sql)

    if record.count > 0
    {
        return (record[0] as! [AnyObject])
    }
    else
    {
        return nil
    }
}

执行 SQL 返回结果集合

///  执行 SQL 返回结果集合
///
///  :param: sql SQL语句
///
///  :returns: 返回 查询的结果集
func execRecordSet(sql: String) -> [AnyObject]
{
    var stmt: COpaquePointer = nil
    var recordList = [AnyObject]()
    if sqlite3_prepare_v2(db, sql.cStringUsingEncoding(NSUTF8StringEncoding)!, -1, &stmt, nil) == TE_OK
    {
        while sqlite3_step(stmt) == SQLITE_ROW
        {
            recordList.append(singleData(stmt)!)
        }
    }
    // 释放语句
    sqlite3_finalize(stmt)
    // 返回结果
    return recordList
}

执行一行数据

///  执行一行数据
///
///  :param: stmt 执行的语句
///
///  :returns: 返回一行数据数组
func singleData(stmt: COpaquePointer) -> [AnyObject]?
{
    var result = [AnyObject]()
    // 返回该表的列数
    let count = sqlite3_column_count(stmt)

    //        #define SQLITE_INTEGER  1
    //        #define SQLITE_FLOAT    2
    //        #define SQLITE_BLOB     4
    //        #define SQLITE_NULL     5
    //        #ifdef SQLITE_TEXT
    //        # undef SQLITE_TEXT
    //        #else
    //        # define SQLITE_TEXT     3
    //        #endif
    //        #define SQLITE3_TEXT     3

    for index in 0..<count
    {
        let type = sqlite3_column_type(stmt, index)
        // 根据字段的类型,提取对应列的值
        switch type {
        case SQLITE_INTEGER:
            result.append(Int(sqlite3_column_int64(stmt, index)))
        case SQLITE_FLOAT:
            result.append(sqlite3_column_double(stmt, index))
        case SQLITE_NULL:
            result.append(NSNull())
        case SQLITE_TEXT:
            let rrrrr: UnsafePointer<UInt8> = sqlite3_column_text(stmt, index)
            let chars = UnsafePointer<CChar>(sqlite3_column_text(stmt, index))
            let str = String(CString: chars, encoding: NSUTF8StringEncoding)!
            result.append(str)
        case let type:
            println("不支持的类型 \(type)")
        }
    }
    // 返回结果
    return result
}
时间: 2024-12-10 00:04:49

Swift版的SQLite帮助类的相关文章

代码重构(二):类重构规则(Swift版)

在上篇博客<代码重构(一):函数重构规则(Swift版)>中,详细的介绍了函数的重构规则,其中主要包括:Extract Method, Inline Method, Inline Temp, Replace Temp with Query, Introduce Explaining Variable, Split Temporary Variable, Remove Assignments to Parameters, Replace Method with Method Object等.关于

iOS开发swift版异步加载网络图片(带缓存和缺省图片)

iOS开发之swift版异步加载网络图片 与SDWebImage异步加载网络图片的功能相似,只是代码比较简单,功能没有SD的完善与强大,支持缺省添加图片,支持本地缓存. 异步加载图片的核心代码如下:  func setZYHWebImage(url:NSString?, defaultImage:NSString?, isCache:Bool){         var ZYHImage:UIImage?         if url == nil {             return   

iOS开发——完整项目实战Swift篇&amp;百思不得姐Swift版总结(二)

百思不得姐Swift版总结(二) tabBar和NavBar配色方案 一.常规主题色使用点 应用在发布前都会对其主题色进行设置,以统一应用的风格(可能有多套主题).在主题色设置上有几个方面,如下: 1.TabBar部分,设置图片高亮.文本高度颜色 2.NavigationBar部分,设置导航栏颜色及字体颜色 3.应用标签等,设置字体的颜色 4.应用图片主题色 主题色的设置点,大体从上面四个方面着手,图片的主题色我们可通过图片更换的方式进行处理.而通过代码来处理的1-3条,有着不同的处理方法.大家

Swift中使用SQLite的配置方法

Swift 中使用 SQLite 1.准备工作 添加 libsqlite3.dylib 创建 SQLite-Bridge.h SQLite3 框架是一套 C 语言的框架,因此需要添加桥接文件 选择 项目-TARGETS-Build Settings,搜索 Bridg 在 Objective-C Bridging Header 中输入 项目名/SQLite-Bridge.h 如果之前设置过桥接文件,可以直接使用 导入SQLite3.thd头文件 导入成功

IOS 实现3D Touch在tableView的简单应用(swift版)

之前记录过OC版实现3D Touch功能的小小演示,最近无事整整swift,也弄个swift版的3D Touoch... 上代码. 一.3D Touch重按主屏icon出现快捷标签有两种添加方式: 1.静态添加,在工程中的info.plist文件中添加,这种方式添加的标签安装后就能显示 2.动态添加,通过代码动态添加快速入口.这种方式添加的标签,必须先运行一次App才会出现. func application(application: UIApplication, didFinishLaunch

关东升的iOS实战系列图书 《iOS实战:入门与提高卷(Swift版)》已经上市

?? 承蒙广大读者的厚爱我的 <iOS实战:入门与提高卷(Swift版)>京东上市了,欢迎广大读者提出宝贵意见.http://item.jd.com/11766718.html 欢迎关注关东升新浪微博@tony_关东升. 关注智捷课堂微信公共平台,了解最新技术文章.图书.教程信息 更多精品iOS.Cocos.移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com智捷课堂论坛网站:http://51work6.com/forum.php 版权声明:本文为博主原

纯 Swift 封装的 SQLite 框架:SQLite.swift

SQLite.swift 是一个使用纯 Swift 语言封装 SQLite3 的操作框架. 特性: 简单的查询和参数绑定接口 安全.自动类型数据访问 隐式提交和回滚接口 开发者友好的错误处理和调试 文档完善 通过广泛测试 示例代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 import SQLite   let db = Database("

Xcode8使用CoreData如何生成OC和Swift版的SubClass

屏幕快照 2016-09-22 12.00.37.png 选中CoreData再右边,有个language选项,选择你要的语言类型,然后再去点击 屏幕快照 2016-09-22 12.02.02.png 上方Editor选中Create NSManageredObject Subclass就可以了.1,Swift中使用OC的类建立桥接头文件,将OC的类导入头文件中,即可在Swift中使用 2,OC使用Swift的类也需要桥接头文件,但是并不是将Swift的类导入头文件中,而是在你需要用到Swif

Swift版iOS游戏框架Sprite Kit基础教程下册

Swift版iOS游戏框架Sprite Kit基础教程下册 试读下载地址:http://pan.baidu.com/s/1qWBdV0C 介绍:本教程是国内唯一的Swift版的Spritekit教程.本教程基于Xcode 6.1+iOS 8.1开发环境,采用Swift语言,详细讲解Sprite Kit游戏开发的各种知识,帮助读者尽快iOS游戏开发的技能. 目录 第7章  音频和视频 1 7.1  背景音乐 1 7.1.1  添加背景音乐 1 7.1.2  控制背景音乐 5 7.1.3  设置音乐