Swift版的SQLite帮助类

来源:互联网 发布:网络被攻击 编辑:程序博客网 时间:2024/05/16 04:18

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}
1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 产后肚子瘦不下来怎么办 出月子后臀部很疼怎么办 做月子时臀部疼怎么办 月子臀部大腿疼困怎么办 产后抱孩子腰疼怎么办 剖腹产后5年小肚子很大怎么办 压力大工作忙瘦了怎么办? 哺乳乳房一大一小怎么办 哺乳期乳房一大一小怎么办 上班之后奶少了怎么办 出了月子还流恶露怎么办? 剖腹产2年刀疤痒怎么办 刨宫产6天伤口痒怎么办 脸的皮肤油油的怎么办 狗狗子宫蓄脓怎么办 刮宫后子宫壁薄怎么办 产妇有痔疮怎么办很疼 二胎着床在剖腹产切口怎么办 刨腹产3月后怀孕怎么办 破腹产两年了肚子还是很大怎么办 抛妇产后肚子大怎么办 破腹产后想大便怎么办 破腹产后肚子硬怎么办 在月子里同房了怎么办 胃变大凸出来了怎么办 坐完月子脊背疼怎么办 月子过后脊背疼该怎么办 怀孕的时候牙疼怎么办 练瑜伽后弯腰疼怎么办 练完瑜伽腰椎疼怎么办 瑜伽开髋动作受伤怎么办 才学瑜伽教培上课紧张怎么办 瑜伽馆不给退费怎么办 脚运动后酸痛该怎么办 婴儿误吞拉链头怎么办 肠功能蠕动慢便秘怎么办 胃肠型和蠕动波怎么办 胃不蠕动了怎么办偏方 喂母乳母亲奶头裂开怎么办 给宝宝吃奶被吃到奶头裂开怎么办 宝宝吃奶奶头裂开了怎么办