简述
一个针对IOS的SQlite API封装的第三方库FMDB,FMDB对SDK中的API做了一层封装,使之使用OC来访问,使用方便而且更熟悉。pod FMDB
@FMDB主要涉及两个类,FMDatabase和FMResultSet 下载完FMDB源码后把文件拖到工程中
具体使用
赋上一系列基本操作,增删改查
#import "ZJIHomeDataBaseHandle.h"
@implementation ZJIHomeDataBaseHandle
static ZJIHomeDataBaseHandle *homeDataBaseHandle = nil;
+(ZJIHomeDataBaseHandle *)shareInstance{
@synchronized(self){
if(!homeDataBaseHandle) {
homeDataBaseHandle = [[ZJIHomeDataBaseHandle alloc]init];
[homeDataBaseHandle openDataBase];
[homeDataBaseHandle createTable];
}
}
return homeDataBaseHandle;
}
#pragma mark - 定义一个 FMDatabase 对象
static FMDatabase * database = nil;
#pragma mark - 获得沙盒文件下Documents路径
- (NSString *)getDocumentsPath{
NSString * documents = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
return documents;
}
#pragma mark - 打开数据库操作------ databaseWithPath open
- (void)openDataBase{
if (database) {
return;
}
NSString * dataBasePath = [[self getDocumentsPath] stringByAppendingPathComponent:@"latestNews.sqlite"];
NSLog(@"%@----dataBasePath----",dataBasePath);
database = [FMDatabase databaseWithPath:dataBasePath];
if (![database open]) {
NSLog(@"打开数据库失败");
}
// 为数据库设置缓存,提高查询效率
database.shouldCacheStatements = YES;
NSLog(@"打开数据库成功");
}
#pragma mark - 关闭数据库操作
- (void)closeDataBase{
if (![database close]) {
NSLog(@"关闭数据库失败");
return;
}
database = nil;
NSLog(@"关闭数据库成功");
}
#pragma mark - 管理创建表的操作
- (void)createTable{
[self openDataBase];
if(![database tableExists:@"t_latestNews"]){
[database executeUpdate:@"CREATE TABLE 't_latestNews' ('id' INTEGER PRIMARY KEY AUTOINCREMENT,'homeLatestNews' text)"];
NSLog(@"创建表成功");
}
[self closeDataBase];
}
-(NSString*)dictionaryToJson:(NSDictionary *)dic{
NSError *parseError = nil;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:&parseError];
return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
}
#pragma mark - 增加数据操作----- executeUpdate
- (void)insertIntoDataBase:(NSDictionary *)homeDictionary{
NSString *homeJSON = [self dictionaryToJson:homeDictionary];
[self openDataBase];
[database executeUpdate:@" DELETE FROM 't_latestNews'"];
[database executeUpdate:@" INSERT INTO 't_latestNews' (homeLatestNews) VALUES (?)",homeJSON];
[self closeDataBase];
}
#pragma mark - 删除数据操作----- executeUpdate
- (void)deleteDataFromDataBase:(NSDictionary *)homeDictionary{
[self openDataBase];
[database executeUpdate:@" DELETE FROM 't_latestNews'"];
[self closeDataBase];
}
#pragma mark - 更新数据操作----- executeUpdate
- (void)updateFromDataBase:(NSDictionary *)homeDictionary{
NSString *homeJSON = [self dictionaryToJson:homeDictionary];
[self openDataBase];
[database executeUpdate:@" UPDATE 't_latestNews' (homeLatestNews) VALUES (?)",homeJSON];
[self closeDataBase];
}
#pragma mark - 查询数据操作(与其他的都不一样,查询是调用executeQuery,切记切记!!!!!!)
- (NSDictionary *)selectAllDataFromDataBase{
[self openDataBase];
FMResultSet * resultSet = [database executeQuery:@" SELECT * FROM 't_latestNews'"];
NSMutableDictionary *dic = [[NSMutableDictionary alloc]init];
while ([resultSet next]) {
NSString *jsonString = [resultSet stringForColumn:@"homeLatestNews"];
dic = [self dictionaryWithJsonString:jsonString];
}
NSLog(@"%@---dictionaryWithJsonString--", dic);
[self closeDataBase];
return dic;
}
-(NSMutableDictionary *)dictionaryWithJsonString:(NSString *)jsonString {
if (jsonString == nil) {
return nil;
}
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSError *err;
NSMutableDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData
options:NSJSONReadingMutableContainers
error:&err];
if(err) {
NSLog(@"json解析失败:%@",err);
return nil;
}
return dic;
}
@end
查看.sqlite文件
先打印文件路径,然后在文件夹中查找到此文件(直接用缩写的文件名xxxx.sqlite是找不到的哦),然后在桌面新建文件夹将sqlite文件复制进去(千万不要拖进去,会在下次运行时重建一个)
最重要下载Datum软件,可即时查看文件缓存的数据
注意:
准确写SQL命令 ,名称一定需对上
@SQL常用命令使用方法:
(1) 数据记录筛选:
sql=“select * from 数据表 where 字段名=字段值 order by 字段名 [desc]”
sql=“select * from 数据表 where 字段名 like %字段值% order by 字段名 [desc]”
sql=“select top 10 * from 数据表 where 字段名 order by 字段名 [desc]”
sql=“select * from 数据表 where 字段名 in (值1,值2,值3)”
sql=“select * from 数据表 where 字段名 between 值1 and 值2”
(2) 更新数据记录:
sql=“update 数据表 set 字段名=字段值 where 条件表达式”
sql=“update 数据表 set 字段1=值1,字段2=值2 …… 字段n=值n where 条件表达式”
(3) 删除数据记录:
sql=“delete from 数据表 where 条件表达式”
sql=“delete from 数据表” (将数据表所有记录删除)
(4) 添加数据记录:
sql=“insert into 数据表 (字段1,字段2,字段3 …) valuess (值1,值2,值3 …)”
sql=“insert into 目标数据表 select * from 源数据表” (把源数据表的记录添加到目标数据表)
(5) 数据记录统计函数:
AVG(字段名) 得出一个表格栏平均值
COUNT(*|字段名) 对数据行数的统计或对某一栏有值的数据行数统计
MAX(字段名) 取得一个表格栏最大的值
MIN(字段名) 取得一个表格栏最小的值
SUM(字段名) 把数据栏的值相加
引用以上函数的方法:
sql=“select sum(字段名) as 别名 from 数据表 where 条件表达式”
set rs=conn.excute(sql)
用 rs(“别名”) 获取统的计值,其它函数运用同上。
(6) 数据表的建立和删除:
CREATE TABLE 数据表名称(字段1 类型1(长度),字段2 类型2(长度) …… )
例:CREATE TABLE tab01(name varchar(50),datetime default now())
DROP TABLE 数据表名称 (永久性删除一个数据表)
@sqlite中用LIMIT返回前2行,语句如下:
select * from aa order by ids desc LIMIT 2