Swift版的SQLite帮助类

前端之家收集整理的这篇文章主要介绍了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) == 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,-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
}

猜你在找的Swift相关文章