sqlite日期查询

SQLite 中关于日期的查询处理 SQLite 中可以根据日期来筛选数据。 日期格式 经过测试支持yyyy-mm-dd和yyyy-mm-dd HH:mm:ss,。 但是 在测试时出现了一个问题:   Cursor cursor = dbHelper.getReadableDatabase().rawQuery("select h_name from test where h_time>='?' and h_time n 阅读详情
 

前几天为了解决openfetion登录速度过慢的问题,决定实现数据的本地化功能,以往采用二进制文件直接写入磁盘的形式效率和灵活性显然远远不够,于是毅然决定采用sqlite3来实现,用过之后才发现sqlite3果然是绝佳的选择,作为一种轻量型的数据库,sqlite3有着它独特的优势,简单易用,而且极为高效,当初在引入这个依赖库的时候还在犹豫,但完成后发现它所带来的用户体验绝对可以掩盖住安装时多一个小步骤的繁琐。

sqlite3第一次用,简单地把自己的使用过程写一下,以后再用到可以参考。

sqlite3对很多通过的SQL语句都支持,像SELECT,UPDATE,INSERT,DELETE等等都支持地很好,只要懂SQL语句就可以用sqlite3。

1,下面是几个比较重要的API函数:

/* 打开数据库,如果不存在则创建一个 */int sqlite3_open(constchar*, sqlite3**);   /* 关闭数据库 */int sqlite3_close(sqlite3*);   /* 获取错误信息字符串 */constchar*sqlite3_errmsg(sqlite3*);   /* 执行SQL语句 */int sqlite3_exec(sqlite3*,constchar*sql, sqlite_callback,void*,char**);   /* 获取SQL查询结果,其实这个函数是不推荐使用的,一方面是因为它不安全,另一方面它不能处理BLOG类型的字段,当然,在这里我在查询的时候还是使用了它,因为没有涉及到多复杂多庞大的数据,这个使用起来又简单,所以就选用了这个方法 */int sqlite3_get_table( sqlite3 *db,/* An open database */constchar*zSql,/* SQL to be evaluated */char***pazResult,/* Results of the query */int*pnRow,/* Number of result rows written here */int*pnColumn,/* Number of result columns written here */char**pzErrmsg /* Error msg written here */);

还有复杂一些的API如下,我没仔细看,像sqlite3_get_table这些函数就是由下面这些API组合而成的

INT sqlite3_prepare(sqlite3*, const CHAR*,INT, sqlite3_stmt**, const CHAR**); INT sqlite3_bind_double(sqlite3_stmt*,INT,DOUBLE); INT sqlite3_bind_int(sqlite3_stmt*,INT,INT); INT sqlite3_bind_int64(sqlite3_stmt*,INT, long long INT); INT sqlite3_bind_null(sqlite3_stmt*,INT); INT sqlite3_bind_text(sqlite3_stmt*,INT, const CHAR*,INT n, void(*)(void*)); INT sqlite3_bind_text16(sqlite3_stmt*,INT, const void*,INT n, void(*)(void*)); INT sqlite3_step(sqlite3_stmt*);

2,创建自增长类型的字段

CREATETABLE history (id INTEGERPRIMARYKEY AUTOINCREMENT, name TEXT,userid TEXT,message TEXT, updatetime TEXT,issend INTEGER);

这个语句中创建的id字段即为自增长的字段,在插入记录的时候只需把id字段写为NULL即可实现其自增长,如:

INSERTINTO history VALUES(NULL,"levin","123456","hello sqlite3","2010-10-23",1);

3.sqlite3的限制读取条数

/* 在其它SQL数据库中SELECT指定条数的记录用如下语句:*/SELECT TOP 10*FROM history;   /* 而在sqlite3中使用下面语句:*/SELECT*FROM history LIMIT10

4.sqlite3的日期函数

sqlite3的日期函数还是很强大的,列举几个常用的。

/* 获取当前时间 */SELECT DATETIME('now') 输出:2010-10-2312:10:50   /* 获取当前时间偏移 */SELECT DATETIME('now','+20 days'); 输出:2010-11-1212:12:54   /* 获取今年开始时间 */SELECT DATETIME('now','start of year'); 输出:2010-01-01 00:00:00   /* 获取本月开始时间 */SELECT DATETIME('now','start of month'); 输出:2010-10-01 00:00:00   /* 获取今天开始时间 */SELECT DATETIME('now','start of day'); 输出:2010-10-23 00:00:00

另外,sqlite3里面有个很重要的时间函数,strftime,这个跟POSIX里面的strftime函数很像,也是将日期类型格式化为字符串类型,如:

SELECT strftime('%Y|%m|%d','now'); 2010|10|23

它的格式化字符和POSIX的strftime也完全一样,再例如我要查询本月的聊天记录,可以使用下面语句:

SELECT*FROM history WHERE strftime('%Y',updatetime)== strftime('%Y','now')AND strftime('%m',updatetime)== strftime('%m','now') ;

5.写入较大数据时采用事务提高效率
我在应用sqlite3的时候其实只是写入了少量的数据,刚开始觉得效率不是什么大问题,后来有用户反馈说他的290+好友的飞信号在登录时要向磁盘写入几十S的数据,这个效率问题着实需要改善,于是采用事务来处理写入,事务的使用也非常简单,其实也就是下面的语句:

sqlite3_exec(db,"BEGIN TRANSACTION;",0,0,&errMsg);   for(;;){ insert into.....}  sqlite3_exec(db,"COMMIT TRANSACTION;",0,0,&errMsg);

这样一系列地插入语句就可以被作为一个事务来执行,在COMMIT TRANSACTION的时候将插入操作写入磁盘,避免了每次插入记录时频繁地读写磁盘数据库,从而使效率大大提高,据说可以比单纯地插入快1000倍,这个我无从考证,不过我这里确实快了很多,几百条记录可以瞬间写入。

就在昨天一本科同学还问我会不会sqlite,我正好前两天也用了,就跟她交流了下,她问我怎么写入多条数据,呃..这个问题很简单,就是循环,在程序里面循环,想在SQL里面循环用sqlite3是做不到的,因为sqlite3忽略了很多数据库很重要的特性,它不支持存储过程,而且也没有其它数据库地高并发性,因此有的时候我多个线程同时访问同一个数据库文件的时候,便会报错说database is locked。

OK,以上只是我个人使用过程中的一点小小地总结,拿过来就用,也没做多少研究,sqlite3一些复杂的机制都没有去了解,把这些基础的东西写下来,给自己做个备份,说不定哪天还会再用到。

TS808效果器制作教程 TS808效果器制作教程 可以在立创商城购买到大部分的电阻电容和IC,音频接口,踩钉,电位器和电源接口可以去某宝看看都买得到的。链接https//pan.baidu.com/s/1QId1eIE3fJ2u5NLBSISvGA。安装过程过于繁琐,把所有元器件按照图纸焊接完成就可以调试了,祝你们成功!这是TS808经典效果器制作过程的记录。IC是JRC4558。... 阅读详情

相关推荐

基于Stigmergy的团队LLM wiki协作机制与FastAPI工程实践

大语言模型驱动的知识管理正在改变个人笔记与团队文档的维护方式,但当多人共同维护一个维基时,如何避免版本覆盖、上下文丢失和幻觉污染成为核心挑战。Stigmergy这一源自生物学的协作机制提供了新思路:通过共享环境中的痕迹(如评论、标记、修订历史)实现异步协作,无需实时沟通或中心协调者。本文将原理落地为可工程化的系统,设计Page、Revision、Trace三大实体,并结合向量索引与LLM审查流程,最终用FastAPI与SQLite搭建一个最小可运行原型。从白蚁筑巢到团队知识库,Stigmergy让每个参与者

weixin_34174322的博客 364

sqlite时间范围查询技巧

这个select语句用来比较两张相同的表即为t1t2,球t2比t1时间小的数量(实际就是在该记录以前所有的记录数量)。原文链接:https://blog.youkuaiyun.com/qq_21101587/article/details/78642423。data_type:目标系统所提供的数据类型,包括bigint和sql_variant,不能使用用户定义的数据类型。AS:用于分隔两个参数,在AS之前的是要处理的数据,在AS之后是要转换的数据类型。二进制,同带binary前缀的效果 : BINARY。

m0_48892985的博客 3899

Moodle平台题库建设技术

Moodle平台题库建设技术简述1新的改变1功能快捷键1合理的创建标题,有助于目录的生成1如何改变文本的样式1插入链接与图片1如何插入一段漂亮的代码片1生成一个适合你的列表1创建一个表格1设定内容居中、居左、居右1SmartyPants1创建一个自定义列表1如何创建一个注脚注释也是必不可少的1KaTeX数学公式1新的甘特图功能,丰富你的文章1UML 图表1FLowchart流程图1导出与导入导出1...

lxf78的博客 4534

Sqlite日期查询

查询日期 一、使用Between AND select * from BatchNumberInfo where Start_Time Between '2019-1-01 00:00:00' AND '2019-7-12 23:59:59' 二、使用>,< select * from BatchNumberInfo where Start_Time > '2019-...

sinat_31608641的博客 4589

从软体机器人到鞋垫分析:Abaqus超弹性材料(Ogden模型)仿真配置全流程

本文详细介绍了Abaqus中Ogden模型在超弹性材料仿真中的应用全流程,涵盖从实验数据导入、参数拟合到模型构建与求解优化的关键步骤。特别针对鞋垫分析等生物力学场景,提供了单元选择、接触设置和并行计算等实用技巧,帮助工程师实现高精度仿真分析。

weixin_42525385的博客 400

基于Vector 的AUTOSAR NvM 模块使用

本文主要讲述Vector的两款工具configurator和Developer关于NvM的配置流程,包括如何新建NvM SWC以及添加和修改NvM block,Developer主要涉及NvM SWC的新建、添加新NvM Block以及修改原有的NvM Block;Configurator主要涉及三个模块NvM、Fee以及Fls,以下将分为两个模块对该部分进行介绍。 一、Developer 使用 1.1 新建NvM SWC并实例化 如下图,为Developer左列列表 图 1.1...

Fly_To_Skyhehe的博客 4967

c# 中SQLite根据周、月、年时间查询统计

需注意的是sqlite中的now的时间格式与c#中的时间的格式有所差别,时间格式不一致会导致查询失败,所以在查询的时侯采用的统一格式 strftime('%Y/%m/%d %H:%M:%S')其中2023-07-28 09:07:44的格式,需在sqlite中作时间上的转换,所以保留的是原有的sqlite中获得时间格式;同时需注意2023/07/24 00:00:00与2023/7/24 00:00:00格式上的区别:07---7。3、查询本周的第一天,即2023/07/24 00:00:00。

qq_48428141的博客 2329

深度学习入门:一文详解BP神经网络

在BP神经网络中,输入层和输出层的节点个数都是确定的,而隐含层节点个数不确定,那么应该设置为多少。实际上,隐含层节点个数的多少对神经网络的性能是有影响的,有一个经验公式可以确定隐含层。上面是对隐含层和输出层之间的权值和输出层的阀值计算调整量,而针对输入层和隐含层和隐含层的阀值调。在BP神经网络中,输入层节点没有阀值。神经网络,神经网络在机器学习中应用比较广泛,比如函数逼近,模式识别,分类,数据压缩,数据。要求输入模式要有足够的随机性,对输入模式的噪声比较敏感,即对于剧烈变化的输入模式,训。

Machine Learning with Tutors 4万+

Sqlite3 查询 今日、昨日、本周、上周、本月、上月、本季度、上季度、本年

select * from 表名 where strftime(‘%m’, datetime(‘now’))/3 - 1 = strftime(‘%m’,字段名)/3 and strftime(‘%Y’, datetime(‘now’)) = strftime(‘%Y’,字段名)select * from 表名 where strftime(‘%Y-%m-%d’, datetime(‘now’),‘-1 days’) = strftime(‘%Y-%m-%d’,字段名)

weixin_40273809的博客 2188

PCL 基于法线微分(DoN)的点云分割【2026最新版】

基于法线微分的分割。博客长期更新,本文最新更新时间为:2026年5月10日。

点云侠的博客 39万+

20、超声多普勒成像技术全解析

本文全面解析了超声多普勒成像技术,涵盖彩色血流成像(CFI)、能量多普勒成像、超快多普勒成像和矢量多普勒成像的原理、流程、优势及临床应用场景。详细探讨了各成像模式的特点,如CFI的血流方向与速度可视化、能量多普勒对小血管的高灵敏度、超快多普勒的高帧率分析能力,以及矢量多普勒消除角度依赖性的创新方法。同时分析了技术面临的挑战及未来发展趋势,包括更高分辨率、人工智能辅助诊断和便携式设备的发展,为医学影像研究和临床诊断提供重要参考。

z2a3b4c5d的博客 279

android按日期函数查询,Android开发中SQLite存储时间和按日期函数查询

Android开发中SQLite存储时间和按日期函数查询Android开发中SQLite存储时间和按日期函数查询在Android开发中,在消息模块中,消息做数据库缓存处理,排序查询或指定时间查询需要用时间和日期函数。本篇简括:存储时间字段查询结果按时间进行排序指定时间范围查询,按年或者按月DAO设计模式操作数据库RxJava异步执行数据库操作存储日期:思路分析:后台数据源:通常在数据库(例如:My...

weixin_35958479的博客 1051

第4篇:使用 NModbus 库快速搭建 Modbus TCP 通信(从零开始用 C# 开发 Modbus 上位机)

本文介绍了如何使用 NModbus 库快速搭建 Modbus TCP 上位机通信程序。通过安装 NModbus4 NuGet 包,开发者可以轻松实现 Modbus TCP 连接,无需手动处理底层协议细节。文章详细演示了核心功能实现: 创建 TCP 客户端连接设备 读取保持寄存器(功能码0x03) 写入单个寄存器(功能码0x06) 关闭连接释放资源 提供完整C#示例代码,包含初始化连接、数据读写等关键操作,帮助开发者快速构建Modbus TCP通信应用。相比手动实现,NModbus库大幅简化了开发流程,特别适

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1046

android sqlite 查询时间,android – sqlite日期查询

我是新的sqlite.我有一个有3列的表1. Id2. FoodName3. Date and time(ex: '1' 'Chicken' '2012-08-10 13:54')我读到某处Android sqlite不提供日期数据类型.所以我使用文本数据类型在本地数据库中存储日期.它工作正常.现在我想写一个查询来检索两个日期之间的记录.我试过但我没有得到它.==&GT;&GT;码...

weixin_35009537的博客 358

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

QT+sqlite3 日期查询问题

最近做为家里做一个小软件,在昨日起查询的时候,我发现sqlite3里面的日期有问题,日期格式如果是yy-mm-dd形式的就使用范围查询,否则会查不全的。例如: 2010年2月9号,应该写成2010-02-09,要是写上2010-2-9就会产生查不到的情况。据我自己分析,应该是这样的,sqlite3进行比对日期的是时候,是先比对年,然后是月份,最后是day,在比对day的时候是按位比较的,第

neu_sunlei的专栏 3153

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

sqlite查询空日期类型_SQLite3中的日期时间函数使用小结

代码如下:import sqlite3conn = sqlite3.connect('/tmp/sqlite.db')cur = conn.cursor()接下来干嘛呢?建一张表吧。这里需要注意的是,SQLite不支持在创建表的同时创建索引,所以要分两步走,先创建表然后再创建索引代码如下:create_table_stmt = '''CREATE TABLE IF NOT EXISTS test_...

weixin_39634351的博客 202

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Android开发中SQLite存储时间和按日期函数查询

1.存储时间字段; 2.查询结果按时间进行排序; 3.指定时间范围查询,按年或者按月 ; 4.DAO设计模式操作数据库 ; 5.RxJava异步执行数据库操作 ;

HeXinGen的博客 1万+

sqlite数据库的日期相关查询

sqlite数据库的日期相关查询。

clever101的专栏 379

sqlite查询日期类型数据时出现问题的解决方法

SQLite数据库里面有一列是日期格式数据。通过C#查询语句查询该数据,会报一个错误,不识别这种日期格式数据。那么对于该数据库如何通过C#语句来查询呢? 经过查找资料,发现在插入数据时,需要用date.ToString("s"),否则插入的数据不是正确的日期格式,自然查询时就出错了。

孤鸿寄语 3469

sqlite中日期函数及日期查询语句

如果对于sqlite不熟悉的同学, 请移步: http://www.runoob.com/sqlite/sqlite-tutorial.html(菜鸟教程),基础的关于sqlite的东西这边都可以找到,可能有其他的网站欢迎推荐。建议自己下一个sqlite3的黑窗口,将具体的代码自己撸一把,加深理解和应用。 1.sqlite中时间函数 参见:http://www.runoob.com/sq

UP_DOWN的博客 1万+

sqlite3怎么筛选一个月之前的_怎么查询指定日期 和 这个日期 之前一个月前的数据...

如何查询指定日期 和 这个日期 之前一个月前的数据本帖最后由 skyxuyan 于 2014-10-22 22:25:11 编辑如何用SQL语句查询指定日期如(2014-10-2110:32:39)和这个日期之前一个月前的数据指定日期为数据表中时间最小的数据还有是指定的日期不是sysdate我原来写的selectsum(ttmon...

weixin_33609020的博客 1331

iOS sqlite查询当天日期的数据

} NSString*timeFormat = @"%Y-%m-%d"; NSString * sql = [NSString stringWithFormat:@"select * from T_TRAVEL_EXPENSE_RETURNTRIP wherestrftime('%@','now') = strftime('%@',SRV_DATE) and USER...

weixin_30739595的博客 408

AndroidStudio使用SQLite查询日期范围

SQLite查询日期范围,使用rawQuery和date

weixin_67445004的博客 619

android sqlite 查询时间,android sqlite 日期查询

例1.select datetime('now');结果:2006-10-17 12:55:54例2.select datetime('2006-10-17');结果:2006-10-17 12:00:00例3.select datetime('2006-10-17 00:20:00','+1 hour','-12 minute');结果:2006-10-17 01:08:00例4.select ...

weixin_39777497的博客 363

SQLite: 注意日期查询中的“前空格”问题将引发错误查询!

在SQLite查询中,需要注意在日期前后的空格。 有一个表,格式  Date:CHAR 如果:SELECT * FROM IF WHERE DATE>'2014-09-01'   ----日期中没有空格 很正常显示: 但是,如果 SELECT * FROM IF WHERE DATE>'  2014-09-01'   ----日期前中有空格! 你将发现,查询的结果

代码过客 915

sqlite查询空日期类型_SQLite 该字符串未被识别为有效的 DateTime

一 查询的列数据类型为date,当它的值为空时,用查询语句select createdate from tb:1)在SQLite数据库管理器SQLiteStudio能正常查询到。2)在.net中,就会抛出异常:该字符串未被识别为有效的 DateTime 错误。解决方法:把类型date改为varchar异常详细信息: System.FormatException: 该字符串未被识别为有效的 Date...

weixin_29765215的博客 621
上一篇: _ConnectionPtr、_RecordsetPtr和_CommandPtr 打开和关闭
下一篇: SQLite支持的数据类型和日期函数
CButtonST
博客等级 码龄16年 42粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值