一、功能

  1. 在开机启动时候,给sqlite3数据库内,添加 ’固定’ 信息的运行日志;
  2. 并把日志写入[.log]文件内;
  3. 日志信息的6个字段为:
    时间time、类型type、主体subject、客体object、结果result、备注remark
  4. 数据库显示为:
    time                type       subject      object   result        remark 
    -------------------------------------------------------------------------------------------
    2019-05-28 10:49:13 系统日志     系统        硬件     成功      完成硬件自检
  5. 日志显示为:
    2019-05-28 11:18:18 localhost :内容: '系统日志','系统','硬件','成功','系统完成硬件自检'

二、准备工作:

1、创建数据库test.db;

# cd /home/workspace/

# touch test.db

# chmod 777 test.db

# sqlite3 test.db

2、创建表testlog,保存日志的文件;

sqlite>CREATE TABLE testlog(time text,type text,subject text,object text,result text,remark text);

三、为表内添加信息----C实现【增加】:

1、代码实现

#include <stdio.h>
#include <string.h>
#include <sqlite3.h>
#include <time.h>
#include <unistd.h>#define SUCCESS 0
#define FAILED -1
#define SQL_COMMON_LEN 1024
#define TEST_LOG_NAME "testlog"/*使用前先建立fw.db数据库,建立syslog表:create table syslog(time text,type text,subject text,object text,result text,remark text);编译时候:gcc operation_log.c -lsqlite3 -o operation_log*/int main()
{int iOpenVal = 0;char acSql[SQL_COMMON_LEN] = {0};char acTime[SQL_COMMON_LEN] = {0};char *fwdb="/home/workspace/test.db";sqlite3 *db = NULL;time_t stTime = {0};struct tm *stTmpPtr = NULL;//获取本地时间stTime = time(NULL);stTmpPtr = localtime(&stTime);sprintf(acTime, "%04d-%02d-%02d %02d:%02d:%02d",stTmpPtr->tm_year+1900, stTmpPtr->tm_mon+1, stTmpPtr->tm_mday,stTmpPtr->tm_hour, stTmpPtr->tm_min, stTmpPtr->tm_sec);//连接sqlite3数据库iOpenVal = sqlite3_open(fwdb, &db);if(iOpenVal != SQLITE_OK){return FAILED;}//拼接日志信息,并加入数据库sprintf(acSql, "insert into %s values('%s','系统日志','系统','硬件','成功','系统完成硬件自检')", TEST_LOG_NAME, acTime);iOpenVal = sqlite3_exec(db, acSql, NULL, NULL, NULL);if(iOpenVal != SQLITE_OK){printf("出错:执行插入数据出错!\n");return FAILED;}sqlite3_close(db);//找出所有日志文件sprintf(acSql, "sudo sqlite3 %s \"select * from %s\"", fwdb, TEST_LOG_NAME);//把每行的竖线变为空格strcat(acSql, "| sed -r 's/\\|/ /g'");//重新拼接strcat(acSql, "| awk '{print $1,$2,\"localhost :内容:\",\"'\\''\"$3\"'\\''\"\",\"\"'\\''\"$4\"'\\''\"\",\"\"'\\''\"$5\"'\\''\"\",\"\"'\\''\"$6\"'\\''\"\",\"\"'\\''\"$7\"'\\''\"}'");//重定向strcat(acSql, "> /home/workspace/test.log");system(acSql);return SUCCESS;
}

2、代码编译执行

# gcc test.c -lsqlite3 -o test#./test

3、查看数据库[testlog表]

# sqlite3 /home/workspace/test.dbsqlite> .du testlogPRAGMA foreign_keys=OFF;BEGIN TRANSACTION;CREATE TABLE testlog(time text,type text,subject text,object text,result text,remark text);INSERT INTO "testlog" VALUES('2019-05-28 11:18:18','系统日志','系统','硬件','成功','系统完成硬件自检');

4、查看日志文件[/home/workspace/test.log]

# cat /home/workspace/test.log2019-05-28 11:18:18 localhost :内容: '系统日志','系统','硬件','成功','系统完成硬件自检'

四、【增加】代码解释说明

《1》Linux —— 时间问题(localtime和gmtime)

  1. localtime是把从1970-1-1零点零分到当前时间系统所偏移的秒数时间转换为本地时间;
  2. 而gmtime函数转换后的时间没有经过时区变换,是UTC时间;
  3. Gmtime获取的时间比localtime获取的时间少8个小时;
  4. Localtime例子点击上方的链接。。即可查看。。

《2》sqlite的语句-数据操作语言

 1、INSERT(插入)

insert into testlog values('时间','系统日志','系统','硬件','成功','系统完成硬件自检')

      2、SELECT(查询)

2、1  System命令,在控制台直接执行sqlite的查询select语句:

sprintf(acSql, "sudo sqlite3 test.db \"select * from %s\"", fwdb, /home/workspace/test.gb);

2、2  直接在命令行执行sqlite的查询语句:

# sudo sqlite3 /home/workspace/test.db "select * from testlog"

《3》Sed命令使得所有的’|’变为’ ’空格

3、1 控制台执行:

sed  -r  's/\|/ /g'   注意:竖线前不加转义字符或者不加-r,都不能匹配中文;

3、2 代码内写为:

strcat(acSql, "| sed -r 's/\\|/ /g'");  注意:再加一个转义字符,用来转义反斜杠;

《4》使用awk命令重新排布信息

[root@localhost sqlite]# sqlite3 ./test.db "select * from testlog" | sed -r 's/\|/ /g'

2019-05-28 15:31:15 系统日志 系统 硬件 成功 系统完成硬件自检

[root@localhost sqlite]# sqlite3 ./test.db "select * from testlog" | sed -r 's/\|/ /g' | awk '{print $2,$3,$1}'

15:31:15 系统日志 2019-05-28

《5》使用awk命令在输出语句中有单引号’’,有逗号

[root@localhost sqlite]# sqlite3 ./test.db "select * from testlog" | sed -r 's/\|/ /g'

2019-05-28 15:42:48 系统日志 系统 硬件 成功 系统完成硬件自检

[root@localhost sqlite]# sqlite3 ./test.db "select * from testlog" | sed -r 's/\|/ /g' | awk '{print $2","$3"'\''",$1}'

15:31:15,系统日志' 2019-05-28

五、删除表内内容,并删除日志文件---C实现【删除】:

1、插入代码

[root@localhost workspace]# cat sql_lite_delete.c
#include <stdio.h>
#include <unistd.h>#define SUCCESS 0
#define FAILED -1#define DATABASE_TEST_LOG_PATH "/home/workspace/test.db"
#define DATABASE_TEST_LOG_NAME "testlog"
#define TEST_LOG_PATH "/home/workspace/test.log"
#define COM_LEN 1024int main(void)
{FILE *pf = NULL;char acSql[COM_LEN] = {0};//清空数据库 popen()函数执行sql语句sprintf(acSql, "sudo sqlite3 %s \"delete from %s\"", DATABASE_TEST_LOG_PATH, DATABASE_TEST_LOG_NAME);pf = popen(acSql, "r");if(NULL == pf){printf("执行sql语句失败!\n");return FAILED;}pclose(pf);//删除日志文件 remove()函数remove(TEST_LOG_PATH);return SUCCESS;
}

2、编译执行

# gcc sql_lite_delete.c -lsqlite3 -o sql_lite_delete

3、运行结果

3、1 查看数据库

3、2 查看文件

sqlite库——C实现,给sqlite数据库添加信息并把信息写入文件,删除日志和库中的日志信息相关推荐

  1. mysql数据库 日志类型_MySQL中的日志类型(一)-摘要和日志的共同特征

    MySQL中的日志类型(一)-摘要和日志的共同特征 发布时间:2020-07-12 19:56:15 来源:51CTO 阅读:506 作者:月饮沙 MySQL中的日志类型 MySQL具有多种日志,用来 ...

  2. 使用.reg文件删除暴风影视库图标和注册信息

    暴风播放器安装后会自动安装一个叫暴风影音库的软件,在你的电脑资源管理器中增加了一个"暴风影视库"的图标.看着很烦,删起来还比较麻烦,于是搜索了相关资源,自己写了个注册表处理文件,方 ...

  3. 69. (待补) (使用sqlite3)实现简单的管理系统 MVC 将链表作为内存数据模型,将sqlite3作为数据库,将终端作为交互界面。读数据库生成 链表,修改链表写入文件。...

    待补 转载于:https://www.cnblogs.com/ZhuLuoJiGongYuan/p/9571219.html

  4. mysql 修改库的校对集_mysql数据库的基本操作(增删改查、字符集、校对集)

    MySQL数据库概述 MySQL数据库是经典的关系型数据库管理系统,MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Dat ...

  5. C基础——目标代码文件、可执行文件和库

    目标代码文件.可执行文件和库 C编程的基本策略是使用程序将源代码文件转换为可执行文件,此文件包含可以运行的机器语言代码.C分两步完成这一工作:编译和链接.编译器将源代码转换为中间代码,链接器将此中间代 ...

  6. sqlite库 —— 为什么要使用 SQLite 数据库?

    SQLite 是一个被大家低估的数据库,但有些人认为它是一个不适合生产环境使用的玩具数据库.事实上,SQLite 是一个非常可靠的数据库,它可以处理 TB 级的数据,但它没有网络层.接下来,本文将与大 ...

  7. sqlite只能用于android系统,Android 数据库的使用 -- Sqlite

    Sqlite介绍 SQLite 是一款内置到移动设备上的轻量型的数据库,是遵守 ACID(原子性.一致性.隔离性.持久性)的关联式数据库管理系统,多用于嵌入式系统中. SQLite 数据库是无类型的, ...

  8. android sqlite 操作类封装,[Android] Sqlite 数据库操做 工具封装类

    sqlite 数据库封装类html DatabaseUtil.java(封装的类)java packagecom.jack.androidbase.tools;importandroid.conten ...

  9. sqlite mysql excel_SQlite数据库信息怎么转成excel文件?

    展开全部 下面的程序能将SQlite数据库信息怎么转成excel文件:package zhaoxing.android.tool; import java.io.File; import java.i ...

  10. mysql 给库赋权,MySQL 8.0.18给数据库添加用户和赋权问题

    MySQL 8.0.18给数据库添加用户和赋权问题 1. 首选使用root用户登录数据库 mysql -uroot -p 2. 使用mysql 数据库 USE mysql; 3. 为mysql创建用户 ...

最新文章

  1. IE下a标签会触发window.onbeforeunload的问题
  2. pycharm怎么查看代码结构,看函数定义、变量定义、类定义索引、目录?(左方structure)
  3. Javascript进阶篇——浏览器对象—Location、Navigator、userAgent、screen对象Script
  4. 砂.随笔.二十.微笑
  5. ssh-keygen -t rsa执行后提示没有权限
  6. silverlight动态创建WCF服务
  7. 卸载centos7自带mysql_centos7完全卸载mysql
  8. sql 获取第10到20个记录
  9. 顶点计划家庭感情冲突问题讨论
  10. HDU操作系统课程设计实验一
  11. 信息系统项目管理师必背核心考点(二十六)三点估算(PERT)
  12. python爬取在线视频思路,用python实现多线程爬取影视网站全部视频方法【笔记】...
  13. 苹果iOS开发者账号从零开始申请
  14. 认识程序集:1. 程序集的生成
  15. python win32api键盘_pythonwin32api键盘输入教程
  16. pip 安装 sklearn 教程 ----Win10 python3.5
  17. 最新版chrome浏览器安装Chrome插件时出现“CRX-HEADER-INVALID“解决方法
  18. 计算机网络相关实验,计算机网络实验
  19. 网页设计常用的12中颜色
  20. 视频处理工具安利,要制作视频的快来

热门文章

  1. python 文件命令
  2. WHUST 2015 Summer Contest #11
  3. 【学习笔记】【oc】类和对象及类的三大基本特征
  4. 25个自适应菜单教程和脚本
  5. 使用 x3dom 框架及 WebGL 在浏览器上显示 3 维模型
  6. c语言 amp 位与 什么意思,C语言中amp;是什么意思?--龙方网络
  7. linux怎么增加cpu负载,Linux下的CPU平均负载
  8. word设置不同页脚
  9. WebService大讲堂之Axis2(5):会话(Session)管理
  10. 一句话说清楚NodeJS中module.exports和exports的区别