Swift版的SQLiteHelper
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的更多相关文章
- Swift版iOS游戏框架Sprite Kit基础教程下册
Swift版iOS游戏框架Sprite Kit基础教程下册 试读下载地址:http://pan.baidu.com/s/1qWBdV0C 介绍:本教程是国内唯一的Swift版的Spritekit教程. ...
- Swift版音乐播放器(简化版),swift音乐播放器
这几天闲着也是闲着,学习一下Swift的,于是到开源社区Download了个OC版的音乐播放器,练练手,在这里发扬开源精神, 希望对大家有帮助! 这个DEMO里,使用到了 AudioPlayer(对音 ...
- 快速排序OC、Swift版源码
前言: 你要问我学学算法在工作当中有什么用,说实话,当达不到那个地步的时候,可能我们不能直接的感觉到它的用处!你就抱着这样一个心态,当一些APP中涉及到算法的时候我不想给其他人画界面!公司的项目也是暂 ...
- iOS可视化动态绘制八种排序过程(Swift版)
前面几篇博客都是关于排序的,在之前陆陆续续发布的博客中,我们先后介绍了冒泡排序.选择排序.插入排序.希尔排序.堆排序.归并排序以及快速排序.俗话说的好,做事儿要善始善终,本篇博客就算是对之前那几篇博客 ...
- swift版的CircleView
swift版的CircleView 效果图 源码 // // CircleView.swift // CircleView // // Created by YouXianMing on 15/10/ ...
- swift版的GCD封装
swift版的GCD封装 说明 本人针对swift封装了GCD,包括GCDQueue,GCDGroup,GCDTimer以及GCDSemaphore,使用较为便利. 源码 https://github ...
- swift版的StringAttribute
swift版的StringAttribute 效果 源码 https://github.com/YouXianMing/Swift-StringAttribute // // StringAttrib ...
- swift版的元组
swift版的元组 说明 元组的内容并不多,使用的话跟普通变量类似,以下是测试源码: // // ViewController.swift // Tuples // // Created by You ...
- swift版的枚举变量
swift版的枚举变量 swift的枚举类型跟普通的类是极为类似的,使用的时候,请不要以为他是一个常量,以下是测试用源码 // // ViewController.swift // SwiftEnum ...
随机推荐
- 统计Apache或Nginx访问日志里的独立IP访问数量的Shell
1.把IP数量直接输出显示: cat access_log_2011_06_26.log |awk '{print $1}'|uniq -c|wc -l 2.把IP数量输出到文本显示: cat acc ...
- [BCB] C++ Builder 绘图 绘制直线 —— 基于像素
大三的这前半个学期了,又遇上了这个精通(滑稽) Delphi的老师,人还挺好的其实. 关于他对分辨率的吐槽呀,对Delphi的赞美啊,都是非常幽默的.另外我倒是很欣赏他对他的笔记本的保养[dell i ...
- 常用的shell命令
作为一名有10年以上使用年龄的Linux/MacOSX用户来说,键盘的作用往往要远大于鼠标.而且,作为一个黑客文化的追随者,我也希望越来越多的用户能认识到命令行的潜在价值,不要把它视为只是计算机专家们 ...
- strcpy 库函数 拷贝函数
strcpy 是在string.h 里面 #include "stdafx.h"#include "string.h"struct Student{int Se ...
- 移动web
1.分辨率 1900*1200这就是一个分辨率, 因为pt的存在,因此还会有一个逻辑分辨率的概念 2.ppi = pixels per inch这里inch不是平方英尺,是英尺 3.dp = devi ...
- Android学习八:获取网络图片
看到QQ群里有个朋友说加载图片内存溢出的问题,所以就按照自己的想法试试的.但是按照他的方法,不知道为何没有发生内存溢出,不知道什么情况. 写这篇文章主要有三个目的: 1.多线程的学习 2.图片加载的学 ...
- IDEA创建maven项目使用命令打包遇到的问题及解决方法
maven项目命令打包springboot项目 首先打开tomcat命令工具(如图所示):
- Javascript中数组与字典(即map)的使用
简述: 简单记录一下数据结构Map和数组, 其实在Javascript这种弱类型的脚本语言中,数组同时也就是字典,下面主要就是字典数组的简易使用 代码: 1. 数组中添加map <!DOCT ...
- Oracle RAC asm常用命令
在Oracle RAC环境下,使用grid帐号执行 运行asmcmd进入asm命令模式,如: [grid@oradb-node1 ~]$ asmcmd ASMCMD> ASMCMD> du ...
- STM32 硬件I2C 到底是不是个坑?
/** ****************************************************************************** * @author Maox ...