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
}

Swift版的SQLiteHelper的更多相关文章

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

    Swift版iOS游戏框架Sprite Kit基础教程下册 试读下载地址:http://pan.baidu.com/s/1qWBdV0C 介绍:本教程是国内唯一的Swift版的Spritekit教程. ...

  2. Swift版音乐播放器(简化版),swift音乐播放器

    这几天闲着也是闲着,学习一下Swift的,于是到开源社区Download了个OC版的音乐播放器,练练手,在这里发扬开源精神, 希望对大家有帮助! 这个DEMO里,使用到了 AudioPlayer(对音 ...

  3. 快速排序OC、Swift版源码

    前言: 你要问我学学算法在工作当中有什么用,说实话,当达不到那个地步的时候,可能我们不能直接的感觉到它的用处!你就抱着这样一个心态,当一些APP中涉及到算法的时候我不想给其他人画界面!公司的项目也是暂 ...

  4. iOS可视化动态绘制八种排序过程(Swift版)

    前面几篇博客都是关于排序的,在之前陆陆续续发布的博客中,我们先后介绍了冒泡排序.选择排序.插入排序.希尔排序.堆排序.归并排序以及快速排序.俗话说的好,做事儿要善始善终,本篇博客就算是对之前那几篇博客 ...

  5. swift版的CircleView

    swift版的CircleView 效果图 源码 // // CircleView.swift // CircleView // // Created by YouXianMing on 15/10/ ...

  6. swift版的GCD封装

    swift版的GCD封装 说明 本人针对swift封装了GCD,包括GCDQueue,GCDGroup,GCDTimer以及GCDSemaphore,使用较为便利. 源码 https://github ...

  7. swift版的StringAttribute

    swift版的StringAttribute 效果 源码 https://github.com/YouXianMing/Swift-StringAttribute // // StringAttrib ...

  8. swift版的元组

    swift版的元组 说明 元组的内容并不多,使用的话跟普通变量类似,以下是测试源码: // // ViewController.swift // Tuples // // Created by You ...

  9. swift版的枚举变量

    swift版的枚举变量 swift的枚举类型跟普通的类是极为类似的,使用的时候,请不要以为他是一个常量,以下是测试用源码 // // ViewController.swift // SwiftEnum ...

随机推荐

  1. 20160405互联网新闻<来自涛涛大产品>

    1.滴滴或将收购腾讯地图,打造“滴滴地图”(滴滴与神州.uber之间的争斗,归根到底还是BAT的代理人之战)2.优信二手车否认合并传言 并谴责58同城仿冒优信网站(商战无所不用其极)3.京东旗下的拍拍 ...

  2. 有关define定义函数所注意的实例

    #define SQR(x) x*x int m=1,k=2; a=SQR(k+m)/SQR(k+m); a=k+m*k+m/k+m*k+m; a=2+1×2+1/2+1×2+1=7.5 #defin ...

  3. ios常见的页面传值方式

    iOS页面间的传值细分有很多种,基本的传值方式有三种:委托Delegate传值.通知NSNotification传值.Block传值,其他在项目中可能会遇到的还有:UserDefault或文件方式传值 ...

  4. android 底层开发入门(一)

    第一个Linux驱动程序:统计单词个数 一.首先了解一下: 打印机驱动写入数据:对于打印机驱动来说,需要接收这些被写入的数据,并将它们通过PC的并口.USB等端口发送给打印机.要实现这一过程就需要Li ...

  5. 初学JAVA 感想

    开始学习任何一门课(包括java),兴趣最重要.一直觉得自己在学计算机编程语言,学习了很多,但每门语言都停留在知识边缘地带,都没深入到它们的精华部分,对它们的精华部分知之甚少,于是趁学校开设这门课,并 ...

  6. applicationCache对象

    applicationCache对象代表了本地缓存,可以在js中进行一些操作.可以用它来通知用户本地缓存中已经被更新,也允许用户手工更新本地缓存.applicationCache.addEventLi ...

  7. 计算机网络自学之路------IP协议(1)

    1)TCP/IP模型与OSI对应 2)TCP/IP集每层主要协议 3)IP协议 4)IP地址的命名与使用 5)子网与子网掩码 1)TCP/IP模型与OSI对应关系 我们看到,TCP/IP只有四层与OS ...

  8. C# 模拟按下回车键自动登录

    private void Form1_Load(object sender, EventArgs e) { //this.Show(); this.Activate(); //this.Focus() ...

  9. 原生select默认显示为空胡fish覅神农大丰今年圣诞节奋笔疾书发撒可交付你说的尽快发那段时间南方大厦尽可能放你的所发生的你富家大室耐腐蚀的看法呢尽快发你上课积啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊撒啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊分你束带结发你看

    下拉框默认为空: <select> <option value="" class="blank"></option> < ...

  10. rabbitmq, windows/linux, c/c++/node.js/golang/dotnet

    官网:http://www.rabbitmq.com/ zeromq 相当于 message backbone,而rabbitmq相当于message broker.有的应用系统中,二者并存. (1) ...