sqlite3 表里插入系统时间(时间戳)

就像在提交日志的时候系统会把提交的时间记录下来一样,如果想在sqlite3下创建的表里插入数据的时候也把插入数据的时间点存储在sqlite数据库里怎么处理呢?

创建一个数据库,如foo.db


在这个表里创建一个表:

CREATE TABLE time([ID] INTEGER PRIMARY KEY,[IDCardNo] VARCHAR (50),[CreatedTime] TimeStamp NOT NULL DEFAULT CURRENT_TIMESTAMP);

插入数据:

INSERT INTO time([IDCardNo]) VALUES('aaa'); 

查看:

select * from time;

结果是

1|aaa|2011-10-6 06:48:51

这时会发现这个时间并不是系统的时间,而世界时间,怎么处理呢?

CREATE TABLE time([ID] INTEGER PRIMARY KEY,[IDCardNo] VARCHAR (50),[CreatedTime] TimeStamp NOT NULL DEFAULT (datetime('now','localtime')));

再次插入数据

INSERT INTO time([IDCardNo]) VALUES('aaa'); 

查看:

1|aaa|2011-10-6 13:05:51

这样就和系统的本地时间对应了。

### 如何在ROS中使用SQLite数据库 #### 创建和初始化数据库连接 为了在机器人操作系统(ROS)环境中利用SQLite数据库,首先需要创建并初始化到该数据库的连接。这可以通过调用`sqlite3_open()`函数完成[^1]: ```c #include <sqlite3.h> int main(int argc, char **argv){ sqlite3 *db; int rc; rc = sqlite3_open("test.db", &db); if(rc != SQLITE_OK){ fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db)); return rc; } } ``` 这段代码展示了如何打开名为`test.db`的数据库文件;如果此文件不存在,则会自动创建。 #### 插入数据至表格 一旦建立了与数据库的成功连接,在ROS节点内便能够执行SQL命令向表里插入新记录。例如,假设有一个传感器正在收集环境温度信息,并希望将其存入名为`sensors_data`的表中: ```sql INSERT INTO sensors_data (timestamp, temperature) VALUES (&#39;2023-19T14:30:00Z&#39;, 22.5); ``` 上述SQL语句将当前时间戳及测量得到的摄氏度数值作为一对键值对加入到了`sensors_data`表之中。 #### 查询存储于表格内的数据 当涉及到从已有的表格检索特定条件下的记录时,可以构建相应的SELECT查询语句并通过API接口传递给SQLite引擎解析执行。比如要获取过去一周内所有的温度读数,可编写如下形式的查询字符串: ```sql SELECT timestamp, temperature FROM sensors_data WHERE datetime(timestamp) >= datetime(&#39;now&#39;,&#39;-7 days&#39;); ``` 这条指令告诉SQLite返回那些在过去七天之内发生的每一条温度变化事件的时间点及其对应的温湿度值。 #### 结合JSON1扩展增强功能 对于更复杂的应用场景而言,可能还需要考虑采用SQLite所提供的JSON1扩展特性来简化某些类型的结构化数据管理任务。通过定义适当格式化的JSON对象并将它们序列化为纯文本后存储在一个单独列下,即可轻松实现这一点[^4]: ```sql CREATE TABLE sensor_readings ( id INTEGER PRIMARY KEY AUTOINCREMENT, data TEXT NOT NULL -- JSON encoded string here ); -- Inserting a new record with JSON content into the table. INSERT INTO sensor_readings(data) VALUES(json_object( &#39;sensor_id&#39;,&#39;SNSR_001&#39;, &#39;readings&#39;, json_array( json_object(&#39;time&#39;,&#39;2023-18T12:00:00Z&#39;,&#39;value&#39;,21), json_object(&#39;time&#39;,&#39;2023-18T13:00:00Z&#39;,&#39;value&#39;,22) ) )); -- Query to extract specific information from stored JSON objects. SELECT json_extract(value,&#39;$.time&#39;) AS time, json_extract(value,&#39;$.value&#39;) AS value FROM sensor_readings, json_each(sensor_readings.data ->> &#39;$.readings&#39;) WHERE sensor_readings.id = 1 AND CAST(time AS DATE) BETWEEN date(&#39;now&#39;,&#39;-1 day&#39;) AND date(&#39;now&#39;); ``` 以上示例说明了怎样把多条传感设备采集来的离散观测结果打包成单个复合型实体进行持久化保存的同时又允许后续高效地按需提取所需片段供进一步分析处理之用。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值