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. 统计Apache或Nginx访问日志里的独立IP访问数量的Shell

    1.把IP数量直接输出显示: cat access_log_2011_06_26.log |awk '{print $1}'|uniq -c|wc -l 2.把IP数量输出到文本显示: cat acc ...

  2. [BCB] C++ Builder 绘图 绘制直线 —— 基于像素

    大三的这前半个学期了,又遇上了这个精通(滑稽) Delphi的老师,人还挺好的其实. 关于他对分辨率的吐槽呀,对Delphi的赞美啊,都是非常幽默的.另外我倒是很欣赏他对他的笔记本的保养[dell i ...

  3. 常用的shell命令

    作为一名有10年以上使用年龄的Linux/MacOSX用户来说,键盘的作用往往要远大于鼠标.而且,作为一个黑客文化的追随者,我也希望越来越多的用户能认识到命令行的潜在价值,不要把它视为只是计算机专家们 ...

  4. strcpy 库函数 拷贝函数

    strcpy 是在string.h 里面 #include "stdafx.h"#include "string.h"struct Student{int Se ...

  5. 移动web

    1.分辨率 1900*1200这就是一个分辨率, 因为pt的存在,因此还会有一个逻辑分辨率的概念 2.ppi = pixels per inch这里inch不是平方英尺,是英尺 3.dp = devi ...

  6. Android学习八:获取网络图片

    看到QQ群里有个朋友说加载图片内存溢出的问题,所以就按照自己的想法试试的.但是按照他的方法,不知道为何没有发生内存溢出,不知道什么情况. 写这篇文章主要有三个目的: 1.多线程的学习 2.图片加载的学 ...

  7. IDEA创建maven项目使用命令打包遇到的问题及解决方法

    maven项目命令打包springboot项目 首先打开tomcat命令工具(如图所示):

  8. Javascript中数组与字典(即map)的使用

    简述: 简单记录一下数据结构Map和数组, 其实在Javascript这种弱类型的脚本语言中,数组同时也就是字典,下面主要就是字典数组的简易使用   代码: 1. 数组中添加map <!DOCT ...

  9. Oracle RAC asm常用命令

    在Oracle RAC环境下,使用grid帐号执行 运行asmcmd进入asm命令模式,如: [grid@oradb-node1 ~]$ asmcmd ASMCMD> ASMCMD> du ...

  10. STM32 硬件I2C 到底是不是个坑?

    /** ****************************************************************************** * @author    Maox ...