iOS中 用FMDB封装一个SQLite数据库
建立一个单例:
DataBaseHandle.h
#import <Foundation/Foundation.h> @class PersonModel; @class FMDatabase; @interface DataBaseHandle : NSObject @property(nonatomic,retain)FMDatabase *db; //创建单例的的接口 + (DataBaseHandle *)shareDateBaseHandle; //创建一个Person表格 - (void)creatPersonTable; //插入person的方法 - (void)insertPersonTable : (PersonModel *)person; //写一个删除人的接口 - (void)deletePersonByPerssonID : (NSString *)ID; //写一个修改人的接口 - (void)uodatePerson : (NSString *)age ByPersonID : (NSString *)ID; //写一个查询所有人的接口 - (NSMutableArray *)selectAllPersonFromPersonTable; @end
DataBaseHandle.m
#import "DataBaseHandle.h" #import "FMDB.h" #import "PersonModel.h" @implementation DataBaseHandle - (void)dealloc { self.db = nil; [super dealloc]; }
创建单例的的接口:
//创建单例对象使其存在于静态区 static DataBaseHandle *handle = nil; //创建单例的的借口 + (DataBaseHandle *)shareDateBaseHandle{ @synchronized(self){ if (handle == nil) { handle = [[DataBaseHandle alloc]init]; } } return handle; }
写一个私有的方法,返回数据库的路径
- (NSString *)dbpath{ return [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject] stringByAppendingPathComponent:@"db.sqlite"]; }
创建一个Person表格
//创建一个Person表格 - (void)creatPersonTable{ //初始化数据库对象 self.db = [FMDatabase databaseWithPath: [self dbpath]]; //打开数据库 BOOL isOpen = [self.db open]; if (isOpen) { NSLog(@"打开成功"); //创建表 BOOL isCreat = [self.db executeUpdate:@"create table if not exists Person(id integer primary key autoincrement,name text,gender text,age integer,salary integer)"]; NSLog(@"%@",isCreat ? @"创建成功":@"创建失败"); }else{ NSLog(@"打开失败"); } }
四种方法:增、删、改、查;
//插入person的方法 - (void)insertPersonTable : (PersonModel *)person{ BOOL isInsert = [self.db executeUpdate:@"insert into Person(name,age)values(?,?)",person.name,person.age]; NSLog(@"%@",isInsert ? @"插入成功":@"插入失败"); } //写一个删除的接口 - (void)deletePersonByPerssonID : (NSString *)ID{ BOOL isDelete = [self.db executeUpdate:@"delete from Person where id = ?",ID]; NSLog(@"%@",isDelete ? @"删除成功":@"删除失败"); } //写一个修改人的接口 - (void)uodatePerson : (NSString *)age ByPersonID : (NSString *)ID{ BOOL isUpdate = [self.db executeUpdate:@"update Person set age = ? where id = ?",age,ID]; NSLog(@"%@",isUpdate ? @"修改成功":@"修改失败"); } //写一个查询所有人的接口 - (NSMutableArray *)selectAllPersonFromPersonTable{ FMResultSet *set = [self.db executeQuery:@"select * from Person"]; NSMutableArray *array = [NSMutableArray arrayWithCapacity:0]; while ([set next]) { NSInteger ID = [set intForColumn:@"id"]; NSString *name = [set stringForColumn:@"name"]; NSInteger age = [set intForColumn:@"age"]; //创建Person对象存储信息 PersonModel *p = [[PersonModel alloc]init]; p.ID = [NSString stringWithFormat:@"%ld",ID]; p.name = name; p.age = [NSString stringWithFormat:@"%ld",age]; //添加到数组 [array addObject:p]; [p release]; } return array; }
建一个model类
PersonModel.h #import <Foundation/Foundation.h> @interface PersonModel : NSObject @property(nonatomic,copy)NSString *ID; @property(nonatomic,copy)NSString *name; @property(nonatomic,copy)NSString *age; @end PersonModel.m #import "PersonModel.h" @implementation PersonModel - (void)dealloc { self.name = nil; self.age = nil; self.ID = nil; [super dealloc]; } @end
===============================测试调用===============================
#import "FirstViewController.h" #import "DataBaseHandle.h" #import "PersonModel.h" @interface FirstViewController () @property(nonatomic,retain)NSMutableArray *dataSource;//接收查询的结果 @end @implementation FirstViewController - (void)dealloc { self.dataSource = nil; [super dealloc]; }
//懒加载 - (NSMutableArray *)dataSource{ if (_dataSource == nil) { self.dataSource = [NSMutableArray arrayWithCapacity:0]; } return [[_dataSource retain]autorelease]; }
TEXT:
- (void)viewDidLoad { [super viewDidLoad]; //调用并验证 [[DataBaseHandle shareDateBaseHandle]creatPersonTable]; NSLog(@"%@",NSHomeDirectory()); PersonModel *p = [[PersonModel alloc]init]; p.name = @"小韩哥"; p.age = @"20"; //调用插入person的方法 // [[DataBaseHandle shareDateBaseHandle]insertPersonTable:p]; //接收数据库返回的查询结果 self.dataSource = [[DataBaseHandle shareDateBaseHandle]selectAllPersonFromPersonTable]; //调用删除人的方法 [[DataBaseHandle shareDateBaseHandle]deletePersonByPerssonID:@"9"]; }
配置显示:
#pragma mark - Table view data source - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { // Return the number of sections. return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { // Return the number of rows in the section. return self.dataSource.count; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"firstcell" forIndexPath:indexPath]; PersonModel *p = self.dataSource[indexPath.row]; cell.textLabel.text = p.name; return cell; }
布局预览:
提示:重在封装SQLite思想,不在效果,能有效调用即可!
iOS中 用FMDB封装一个SQLite数据库的更多相关文章
- 在IOS中使用DES算法对Sqlite数据库进行内容加密存储并读取解密
在IOS中使用DES算法对Sqlite 数据库进行内容加密存储并读取解密 涉及知识点: 1.DES加密算法: 2.OC对Sqlite数据库的读写: 3.IOS APP文件存储的两种方式及读取方式. 以 ...
- iOS中使用FMDB事务批量更新数据库
今天比较闲看到大家在群里讨论关于数据库操作的问题,其中谈到了"事务"这个词,坦白讲虽然作为计算机专业的学生,在上学的时候确实知道存储过程.触发器.事务等等这些名词的概念,但是由于毕 ...
- IOS开发-UI学习-sqlite数据库的操作
IOS开发-UI学习-sqlite数据库的操作 sqlite是一个轻量级的数据库,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了,而且它的处理速度比Mysql.PostgreSQL这 ...
- 在VB中利用Nuget包使用SQLite数据库和Linq to SQLite
上午解决了在C#中利用Nuget包使用SQLite数据库和Linq to SQLite,但是最后生成的是C#的cs类文件,对于我这熟悉VB而对C#白痴的来说怎么能行呢? 于是下午接着研究,既然生成的是 ...
- 创建一个 SQLite 数据库
首先,我们学习如何创建一个SQLite 数据库.如果想要在data/example.sqlite 这个路径中创建一个示例数据库,就必须确保该路径存在.如果该路径不存在,就必须先创建路径:if (!di ...
- 将 flask 中的 session 存储到 SQLite 数据库中
将 flask 中的 session 存储到 SQLite 数据库中 使用 flask 构建服务器后端时,常需要在浏览器端存储 cookie 用于识别不同用户,根据不同的 cookie 判断出当前请求 ...
- Electron中使用sql.js操作SQLite数据库
推荐sql.js——一款纯js的sqlite工具. 一.关于sql.js sql.js(https://github.com/kripken/sql.js)通过使用Emscripten编译SQLite ...
- android 一个SQLite数据库多个数据表的基本使用框架 (带demo)
android 一个SQLite数据库多个数据表(带demo) 前言 demo演示 一.搭建 二.建立实体类 三.建立数据库操作类 ...
- 在ios中使用FMDB
SQLite (http://www.sqlite.org/docs.html) 是一个轻量级的关系数据库.iOS SDK很早就支持了SQLite,在使用时,只需要加入 libsqlite3.dyli ...
随机推荐
- public、protected、default、private区别
public.protected.default.private: 修饰符 本类 同包 子类 其他 public √ √ √ √ protected √ √ √ × default √ √ × × p ...
- SpringMVC之简单的增删改查示例(SSM整合)
本篇文章主要介绍了SpringMVC之简单的增删改查示例(SSM整合),这个例子是基于SpringMVC+Spring+Mybatis实现的.有兴趣的可以了解一下. 虽然已经在做关于SpringMVC ...
- MySql准备工作
1.linux 下启动mysql 服务 sudo service mysql start 2.登录 mysql -u用户 -p密码 3.显示库 show databases: 4.使用库 use 库名 ...
- python基础学习(一)
python简介 python的创始人为吉多·范罗苏姆(Guido van Rossum),诞生时间1989年圣诞 一.变量的命令规则 1.变量只能由大小写字母.数字和下划线三部分组成,并且不能以数字 ...
- 深入Java虚拟机(4)——网络移动性
一.软件应用程序发展的几个阶段 软件应用程序发展经历了如下几个阶段: 服务于多个终端用户的大型计算机系统 孤立的个人计算机上运行孤立的软件 客户机/服务器模式 分布式处理模式 内容服务模式(网络移动性 ...
- Spark:聚类算法之LDA主题模型算法
http://blog.csdn.net/pipisorry/article/details/52912179 Spark上实现LDA原理 LDA主题模型算法 [主题模型TopicModel:隐含狄利 ...
- Android的Spinner控件用法解析
微调框 微调框提供一种方法,让用户可以从值集中快速选择一个值.默认状态下,微调框显示其当前所选的值. 触摸微调框可显示下拉菜单,其中列有所有其他可用值,用户可从中选择一个新值. 您可以使用 Spinn ...
- springMVC源码分析--SimpleServletHandlerAdapter(二)
上一篇博客springMVC源码分析--HandlerAdapter(一)中我们主要介绍了一下HandlerAdapter接口相关的内容,实现类及其在DispatcherServlet中执行的顺序,接 ...
- React Native之ScrollView控件详解
概述 ScrollView在Android和ios原生开发中都比较常见,是一个 滚动视图控件.在RN开发中,系统也给我们提供了这么一个控件.不过在RN开发中 ,使用ScrollView必须有一个确定的 ...
- SQL Server 扩展事件(Extented Events)从入门到进阶(3)——通过界面操作Extented Event
本文属于 SQL Server扩展事件(Extended Events)从入门到进阶 系列 对于接纳扩展事件,其中一个最大的障碍就是要对XML和XQuery有一定的了解以便分析数据.我们可以使用T-S ...