iOS对sqlite3进行封装
sqlite3是轻量级的数据库, 多用于移动端, 由于sqlite3多是C语言函数, 操作起来比较麻烦, 下面进行封装
demo地址:https://github.com/NieYinlong/DataBaseDemo.git
首先创建数据库单例类 DataBaseHandle
//
// DataBaseHandle.m
// DataBaseDemo
//
// Created by 聂银龙 on 2017/7/28.
// Copyright © 2017年 nieyinlong. All rights reserved.
//#import "DataBaseHandle.h"static DataBaseHandle *_instance;@implementation DataBaseHandle+ (instancetype)shareInstance {static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{_instance = [[DataBaseHandle alloc] init];});return _instance;
}+ (instancetype)allocWithZone:(struct _NSZone *)zone {static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{_instance = [super allocWithZone:zone];});return _instance;
}- (id)copyWithZone:(NSZone *)zone
{return _instance;
}#pragma mark ---关闭数据库(链接)
-(void)closeDB{int ret = sqlite3_close(_db);if (ret == SQLITE_OK) {printf("关闭成功");_db = NULL;} else {printf("关闭失败");}}// sqlite3 * 表示咱们的数据库
- (sqlite3 *)openDB
{if (_db != nil) {return _db;}NSString *docuPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject;// 数据库路径NSString *db_suffix = [NSString stringWithFormat:@"%@.db", @"YLDataBase"];NSString *dbPath = [docuPath stringByAppendingPathComponent:db_suffix];int result = sqlite3_open(dbPath.UTF8String, &_db);if (result == SQLITE_OK) {NSLog(@"创建(链接)数据库成功! %d = %@",result, dbPath);} else {NSLog(@"创建(链接)数据库失败! %d",result);}return _db;
}#pragma mark ---创建数据库中的表(table)
-(void)creatTableWithSql:(NSString *)sql {[self openDB];char *errmsg = NULL;int ret = sqlite3_exec(_db, sql.UTF8String, NULL, NULL, &errmsg);if (ret == SQLITE_OK) {NSLog(@"创建表成功");}else {printf("创建表失败: %s", errmsg);}}#pragma mark - 向指定表中插入数据
- (void)insertDataSql:(NSString *)sql {[self openDB];char *errmsg = NULL;int result = sqlite3_exec(_db, sql.UTF8String, NULL, NULL, &errmsg);if (result == SQLITE_OK) {NSLog(@"插入成功");} else {NSLog(@"插入失败");}}#pragma mark - 删除某表中的一条数据
- (void)deleteDataSql:(NSString *)sql {[self openDB];char *errmsg = NULL;int result = sqlite3_exec(_db, sql.UTF8String, NULL, NULL, &errmsg);if (result == SQLITE_OK) {NSLog(@"删除成功");} else {NSLog(@"删除失败");}
}#pragma mark -更新数据
- (void)updateDataSql:(NSString *)sql {[self openDB];char *errmsg = NULL;int result = sqlite3_exec(_db, sql.UTF8String, NULL, NULL, &errmsg);if (result == SQLITE_OK) {NSLog(@"更新成功");} else {NSLog(@"更新失败 ");}
}#pragma mark - 查询
- (id)selectDataSql:(NSString *)sql {NSMutableArray *arr = [NSMutableArray array];[self openDB];// 查询的跟随指针sqlite3_stmt *stmt;int ret = sqlite3_prepare(_db, sql.UTF8String, -1, &stmt, NULL);if (ret == SQLITE_OK) {NSLog(@"查询成功");while (sqlite3_step(stmt) == SQLITE_ROW) {// 一条数据中 第0个字段NSString *v0 = [NSString stringWithUTF8String:( char *)sqlite3_column_text(stmt, 0)];// 第1个字段NSString *v1 = [NSString stringWithUTF8String:( char *)sqlite3_column_text(stmt, 1)];// 第2个字段NSString *v2 = [NSString stringWithUTF8String:( char *)sqlite3_column_text(stmt, 2)];// 第3个字段NSString *v3 = [NSString stringWithUTF8String:( char *)sqlite3_column_text(stmt, 3)];// 打印所有数据NSLog(@"=== %@ %@ %@ %@", v0, v1, v2, v3);NSDictionary *dic = @{@"stuID" : v0,@"name" : v1,@"age" : v2,@"weight": v3};[arr addObject:dic];}} else {NSLog(@"查询失败");}return arr;
}@end
在ViewController使用
//
// ViewController.m
// DataBaseDemo
//
// Created by 聂银龙 on 2017/7/28.
// Copyright © 2017年 nieyinlong. All rights reserved.
//#import "ViewController.h"
#import "DataBaseHandle.h"
#import <sqlite3.h>
@interface ViewController ()
@property(nonatomic, strong) DataBaseHandle *dbHandle;@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];_dbHandle = [DataBaseHandle shareInstance];}- (IBAction)actionCreateTable:(UIButton *)sender {// 创建学生表NSString *sql1 = @"CREATE TABLE IF NOT EXISTS students (stuID text paimary key not NULL, name TEXT, age INTEGER, weight INTEGER);";[_dbHandle creatTableWithSql:sql1];
}- (IBAction)actionInsert:(UIButton *)sender {// 向表中循环插入数据for (int i = 0; i < 5; i++) {NSString *sql2 = [NSString stringWithFormat:@"INSERT INTO students (stuID, name, age, weight) values ('%d', '张飞%d号', '%d', '%d')", i, i, 20 + i, 60 + i];[_dbHandle insertDataSql:sql2];}
}- (IBAction)actionDelete:(UIButton *)sender {// 删除NSString *sql3 = @"delete from students where name = '张飞2号' ";[_dbHandle deleteDataSql:sql3];}- (IBAction)actionUpdate:(UIButton *)sender {NSString *sql = @"update students set age = 1000 , name = '诸葛亮' where name = '张飞1号' ";[_dbHandle updateDataSql:sql];
}- (IBAction)actionQuery:(UIButton *)sender {NSString *sql = @"select * from students";id v = [_dbHandle selectDataSql:sql];NSLog(@"查询结果
iOS对sqlite3进行封装相关推荐
- 使用iOS原生sqlite3框架对sqlite数据库进行操作
摘要: iOS中sqlite3框架可以很好的对sqlite数据库进行支持,通过面向对象的封装,可以更易于开发者使用. 使用iOS原生sqlite3框架对sqlite数据库进行操作 一.引言 sqlit ...
- ios中SQLite3的基本操作
本文转自:http://blog.csdn.net/eduora_meimei/article/details/24299133 iOS关于sqlite3操作 iPhone中支持通过sqlite3来访 ...
- 【iOS系列】-xib封装使用
[iOS系列]-xib封装使用 Xib文件可以用来描述某一块局部的UI界面 Xib文件的加载 修改xib文件的大小size(Freeform) 第一: NSArray *objs = [[NSBund ...
- 基于iOS 10、realm封装的下载器
代码地址如下: http://www.demodashi.com/demo/11653.html 概要 在决定自己封装一个下载器前,我本以为没有那么复杂,可在实际开发过程中困难重重,再加上iOS10和 ...
- IOS免签支持在线封装app分发源码 免签封装带绿标
简介: [运营版]在线IOS免签封包 查看更多关于 免签封包 的文章 分发平台 查看更多关于 分发平台 的文章 一键IOS免签 查看更多关于 一键IOS免签 的文章 支持在线封装app分发源码 查看更 ...
- app应用分发平台|苹果ios超级签名|APP封装打包|应用内测托管平台|iOS应用企业签名|Android应用上传内测-虾分发
CDN分发平台-注册免审核-虾分发 https://xiafenfa.com/ app应用分发平台|苹果ios超级签名|APP封装打包|应用内测托管平台|iOS应用企业签名|Android应用上传内测 ...
- iOS 数据库-SQLite3 CoreData FMDB
在iOS开发中数据存储的方式可以归纳为两类:一类是存储为文件,另一类是存储到数据库.例如前面IOS开发系列-Objective-C之Foundation框架的文章中提到归档.plist文件存储,包括偏 ...
- iOS常用动画 类封装
//这是一个很好的动画封装类 很容易明白很详细 和大家分享 // CoreAnimationEffect.h // CoreAnimationEffect // // Created by Vince ...
- 【iOS】sqlite3的使用(増删改查)
目录: 一.sqlite3常用函数 二.将sqlite3集成到项目,实现増删改查 三.封装DBManager 四.Demo 一.sqlite3常用函数及解释 (1)sqlite3_open: 用来创建 ...
- IOS开发之sqlite封装
上一节实现了最基本的增删改查,所有操作数据库的方法都写在控制器里,这样会有一个问题,如果修改CURD(增删改查)操作方法会非常麻烦,这一节我们对CURD进行封装,在控制器里直接调用封装好的工具. 下面 ...
最新文章
- python c++操作raw文件
- music算法原理_大话FMCW雷达之区域检测原理
- hdu 5464(简单dp)
- explode() 字符串转换数组
- 段错误、内存泄漏、内存溢出、堆溢出、栈溢出
- JPA 2.1如何成为新的EJB 2.0
- Python---寻找给定序列中相差最小的两个数字
- 网络系统计算机专用术语有哪些,计算机网络专业术语
- 五千的手机和两三千的手机使用起来有什么不一样?有必要买贵的吗?
- 微软推荐您完成Windows 10 的免费升级
- 全球高精度5米 12.5米 30米地形(DEM)高程数据(tif格式)下载
- 固定在计算机主机箱体上的起到连接计算机,固定在计算机主机箱箱体上的、起到连接计算机各种部件的纽带和桥梁作用的是( )。...
- 电视盒子显示ntp服务器异常,云计算-更换VRM主节点所在服务器主板后,出现VRM与NTP服务器状态异常的处理方法...
- matlab应用测试,moocMATLAB程序与应用单元测试答案
- 受疫情影响!美国大量科技初创企业要挨饿或倒闭
- yarn 命令学习:yarn application
- 读书笔记:培训师必修课
- AD(十五)3D模型的创建和导入
- Ambari 2.7.5+HDP3.1.5离线安装详细教程(附安装包)
- 汉能面试-互联网老辛根据学员面试录音整理
热门文章
- Flutter系列五:State的生命周期
- ffmpeg--异常打印
- SAT词汇备考之(Barrons)巴朗3500基础词汇(List 49)
- 帝国cms ajax,帝国CMS注册体验加强 ajax检测用户名和密码
- Markdown表格合并单元格
- 计算机科学的刊物卷号,期刊的卷号和期号怎么看
- AttributeError: module ‘win32com.gen_py.00020905-0000-4B30-A977-D214852036FF
- 怎么恢复计算机文件查看方式,win7电脑打开方式怎么还原?win7电脑还原打开方式的方法...
- 西游记中唐僧禅心坚定不好女色
- 嵌入式实践教程--Android HAL自定义HAL代码教程