文档章节

iOS SQLite数据库存储时间

壹峰
 壹峰
发布于 2017/04/26 15:41
字数 612
阅读 11
收藏 0

http://www.jianshu.com/p/f78d89848f5c

当初我学fmdb操作SQLite3使用的时候遇到了一个问题,怎么存储时间呢?于是我找了很久才有了答案。今天就分享一下。
MesaSQLite可以查看sqlite数据库内的具体内容,小伙伴们有兴趣的可以下一个

  • 我当时想到了一个方法,使用FastCoder把时间转成二进制再存储,发现并不行。
  • SQLite3存储时间是以时间戳NSTimeInterval的形式,意思就是要存储的时间距离1970年的秒数,是double类型。
  • 在我们使用fmdb创建表时类型选择datetime,插入时间之前要把时间转成时间戳NSTimeInterval tInterval=[myDate timeIntervalSince1970];//把时间转成时间戳
  • 从数据库取出的时候有2种取法1.NSTimeInterval tIn=[rs doubleForColumn:@"time"];//获取时间戳 2.NSDate* data=[rs dateForColumn:@"time"];//获取时间
  • 要取出某段时间的数据时,只要判断时间戳就行了

注意SQLite是在MRC下运行,使用完SQLite3之后要及时关闭,不然会内存泄漏

以下是小Demo

//NULL - 空值
//INTERGER - 有符号整数类型
//REAL - 浮点数类型
//TEXT - 字符串(其编码取决于DB的编码)
//BLOB - 二进制表示

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    NSString* documentsPath=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
    NSString* path=[documentsPath stringByAppendingPathComponent:@"time.sqlite"];

    //创建数据库
    FMDatabase* db=[FMDatabase databaseWithPath:path];

    //创建表
    if ([db open]) {
        NSString* sql=@"create table if not exists timeSql(id integer PRIMARY KEY AUTOINCREMENT,time datetime)";
        BOOL result=[db executeUpdate:sql];
        if (result) {
            NSLog(@"建表成功");
        }else{
            NSLog(@"建表失败");
        }
    }

    //存储以时间戳的形式
    //添加2条时间数据
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat: @"yyyy-MM-dd HH:mm:ss"];

    NSArray* timeArr=@[@"2014-02-21 16:37:05",@"2016-02-21 16:37:05"];
    for (int i=0; i<2; i++) {

        [db executeUpdate:@"INSERT INTO timeSql(time) VALUES (?)",[dateFormatter dateFromString:timeArr[i]]];
    }

    //查询数据
    //目标:查询出比 2015-01-01 00:00:00 要晚的时间
    NSDate* myDate=[dateFormatter dateFromString:@"2015-01-01 00:00:00"];
    NSTimeInterval tInterval=[myDate timeIntervalSince1970];//把时间转成时间戳

    NSString* sqlR=@"select time from timeSql";
    FMResultSet* rs=[db executeQuery:sqlR];
    while ([rs next]) {

        NSTimeInterval tIn=[rs doubleForColumn:@"time"];//获取查询数据中的时间戳
        if (tIn>tInterval) { //比对时间戳

            NSDate* data=[rs dateForColumn:@"time"]; //获取比 2015-01-01 00:00:00 要晚的时间
            NSLog(@"%@",[dateFormatter stringFromDate:data]);
        }
    }

    //关闭数据库
    if ([db open]) {
        [db close];
    }
}

注:相关内容我会继续更新。如果想找一些iOS方面的代码可以关注我的简书,我会持续更新,大家一起探讨探讨
在此谢谢大家阅读😊

本文转载自:

共有 人打赏支持
壹峰
粉丝 9
博文 591
码字总数 9582
作品 0
广州
其他
私信 提问
iOS 数据库比较:SQLite vs. Core Data vs. Realm

如果你想开发一个能够快速运行并没有Bug的伟大应用,你就必须得仔细的考虑一下你的应用的各个方面。有这么一个你必须解决的方面是怎样存储和查询大数据,那么你就很可能会使用到数据库。在大...

oschina
2016/02/20
8.4K
17
将sqlite数据库复制到用户目录

Sqlite如何在IOS开发中应用是本文要介绍的内容,主要是来学习在IOS开发中sqlite数据库的使用方法。sqlite数据库初始化,复制到用户目录,并判断是否数据库已经存在,或者复制是否成功! 在A...

于赟
2012/11/18
0
0
iOS学习之sqlite的创建数据库,表,插入查看数据

iOS sqlite数据库操作。步骤是: 先加入sqlite开发库libsqlite3.dylib, 新建或打开数据库, 创建数据表, 插入数据, 查询数据并打印 1、新建项目sqliteDemo,添加使用sqlite的库libsqlite3....

知行合一100
2012/06/29
0
0
iOS平台强大Sqlite操作引擎开源库

前言 首先写这篇文章之前自我介绍一下,我叫吴海超(WHC)在iOS领域有丰富的开发架构经验Github以后我也会以文章的形式分享具有实战意义的文章给大家,希望能够给大家有所帮助。 主题 这期我想...

WHC
2017/03/07
0
0
使用UniDAC在Delphi XE4中开发iOS应用

使用UniDAC在Delphi XE4中开发iOS应用   核心提示:Delphi XE4的发布让很多Delphi开发者欣喜若狂,毫无疑问它使得Delphi开发更简单且更容易被理解,而且让开发无论是iPhone、iPad还是iPod的...

vga
2014/06/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

linux 静态IP、DNS、主机名配置

linux 静态IP、DNS、主机名配置 一、IP配置 进入网络配置文件目录 cd  /etc/sysconfig/network-scripts/ 列出当前目录下文件名 ll 编辑配置文件 注意:ifcfg-eth0是我电脑的一个网卡标识...

小儿
15分钟前
4
0
配置vagrant使用三种网络

使用vagrant安装之后一直使用127.0.0.1进行访问。但是一直使用这个ip肯定满足不了的。我们装肯定是有需求的,那么本节就讲解一下用vagrant的网络配置。 vagrant中一共提供了三种网络配置。 ...

echojson
16分钟前
0
0
重磅发布:阿里开源 OpenJDK 长期支持版本 Alibaba Dragonwell

3 月 21 日北京阿里云峰会,阿里巴巴正式宣布对外开源 OpenJDK 长期支持版本 Alibaba Dragonwell。作为 Java 全球管理组织 Java Community Process (JCP) 的最高执行委员会的唯一中国代表,以...

阿里云官方博客
16分钟前
1
0
重磅发布:阿里开源 OpenJDK 长期支持版本 Alibaba Dragonwell

3 月 21 日北京阿里云峰会,阿里巴巴正式宣布对外开源 OpenJDK 长期支持版本 Alibaba Dragonwell。作为 Java 全球管理组织 Java Community Process (JCP) 的最高执行委员会的唯一中国代表,以...

阿里云云栖社区
22分钟前
0
0
OAuth2实现单点登录SSO

1. 前言 技术这东西吧,看别人写的好像很简单似的,到自己去写的时候就各种问题,“一看就会,一做就错”。网上关于实现SSO的文章一大堆,但是当你真的照着写的时候就会发现根本不是那么回事...

java菜分享
22分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部