iOS

数据库

2015-12-07  本文已影响96人  康大侠

SQLite3

SQL语句定义

SQL语句是对关系数据库进行定义和操作的语句。

SQLite将数据值的存储划分为以下几种存储类型:
NULL: 表示该值为NULL值。
INTEGER: 无符号整型值。
REAL: 浮点值。
TEXT: 文本字符串,存储使用的编码方式为UTF-8、UTF-16BE、UTF-16LE。
BLOB: 存储Blob数据,该类型数据和输入数据完全相同。

增删改查(CRUD) create、read、update、delete。

2.UNIQUE字段名称唯一,如果有一个叫“李四”,不能出现第二个“李四”
CREATE TABLE IF NOT EXISTS t_dog(name text NOT NULL UNIQUE,age integer);

3.DEFAULT设置默认值,可以根据设置改变
CREATE TABLE IF NOT EXISTS t_cat(name text NOT NULL UNIQUE,age integer DEFAULT 1);

常见操作

FMDB

FMDB有三个主要的类
参考
FMDatabase
一个FMDatabase对象就代表一个单独的SQLite数据库用来执行SQL语句
FMResultSet
使用FMDatabase执行查询后的结果集

FMResultSet 提供了很多方法来获得所需的格式的值:

    intForColumn:
    longForColumn:
    longLongIntForColumn:
    boolForColumn:
    doubleForColumn:
    stringForColumn:
    dataForColumn:
    dataNoCopyForColumn:
    UTF8StringForColumnIndex:
    objectForColumn:

FMDatabaseQueue
用于在多线程中执行多个查询或更新,它是线程安全的

set = [_db executeQuery:@"select * from t_collects where userId = ? and workid = ?;",userId,dict[@"ID"]];
if ([set next]) {
//更新
}else{
//插入
}

 // 1.打开数据库
    NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"shops.sqlite"];
    _db = [FMDatabase databaseWithPath:path];
    [_db open];
    
// 2.创表
[_db executeUpdate:@"create table if not exists t_collects (id integer primary key autoincrement,createat text not null, access_token text not null,workid integer not null,list blob,userId integer not null,Fid integer not null unique );"];

//根据字典保存到数据库
+ (void)saveCollect:(NSDictionary *)dict
{
    if (dict == nil) {
        return;
    }
    NSNumber *userId = [YQUserInfoModel takeUserToken].ID;
    FMResultSet *set = nil;
    set = [_db executeQuery:@"select * from t_collects where userId = ? and workid = ?;",userId,dict[@"ID"]];
    NSData *data = [NSJSONSerialization dataWithJSONObject:dict options:0 error:nil];
//为什么查询的结果只有一条也要调用next方法?
    if ([set next]) {
        [_db executeUpdate:@"UPDATE t_collects SET list = ? WHERE workid = ? ;",data,dict[@"ID"]];
    }else{
        [_db executeUpdate:@"insert into t_collects (userId,list,createat,workid,access_token,Fid) values (?, ?, ?, ?, ?, ?);",userId,data,dict[@"CreateAt"],dict[@"ID"],@"collect",dict[@"Fid"]];
    }
    [set close];
}

//从数据库取出全部数据
+ (NSMutableArray *)cacheCollects
{
    NSNumber *userId = [YQUserInfoModel takeUserToken].ID;
    FMResultSet *set = nil;
    set = [_db executeQuery:@"select * from t_collects where userId = ? order by Fid desc;",userId];
    NSMutableArray *listArr = [NSMutableArray array];
    while([set next]) {
        NSData *data = [set dataForColumn:@"list"];
        NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
        YQWorkList *list = [YQWorkList modelWithKeyValues:dict];
        [listArr addObject:list];
    }
    [set close];
    return listArr;
}
//根据主键查询信息
+ (YQWorkList *)searchCollectsWithID:(NSInteger )ID
{
    FMResultSet *set = nil;
    set = [_db executeQuery:@"select * from t_collects where workid = ?;",@(ID)];
    YQWorkList *list = nil;
    if ([set next]) {
        NSData *data = [set dataForColumn:@"list"];
        NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
        list = [YQWorkList modelWithKeyValues:dict];
    }
    [set close];
    return list;
}

//删除数据库
+ (void)deleteCollectsWithID:(NSInteger)ID
{
    [_db executeUpdate:@"delete from t_collects where workid = ?;",@(ID)];
}

+ (void)deleteCollects
{
    [_db executeUpdate:@"delete from t_collects ;"];
}

将图片保存到数据库

http://m.blog.csdn.net/blog/wei78008023/44903541

上一篇 下一篇

猜你喜欢

热点阅读