温度上报实时监控项目——数据库

Part3 SQlite3数据库的基本使用

一、程序运行结果

1、服务器端

注:gcc编译时一定要加上-lsqlite3选项
① 服务器端未运行在后台(输出及出错均打印在屏幕上)
在这里插入图片描述

② 服务器端运行在后台(输出及出错均打印至日志文件中上)在这里插入图片描述

2、客户端

① 客户端未运行在后台(输出及出错信息均打印在屏幕上)
在这里插入图片描述
② 客户端运行在后台(输出及出错均发送给日志文件上)
在这里插入图片描述

二、SQlite3数据库基本使用

       关于sqlite3数据库的介绍和使用,我是在菜鸟教程的sqlite板块学习的,这里我只做本项目所用到的功能模块,想请读者可进入以下链接学习详细的数据库使用方法!
       链接如下:(http://www.runoob.com/sqlite/sqlite-c-cpp.html)

1、安装sqlite3数据库

       使用SQlite3数据库之前,首先要确保自己的Linux服务器下有sqlite3数据库;如果没有,则需要安装sqlite3数据库!
命令行输入 sudo apt-get install sqlite3

2、SQlite3——C/C++ 接口 API

以下是重要的 C&C++ / SQLite 接口函数,本项目中均使用到!

序号 API & 描述
sqlite3_open(const char *filename, sqlite3 **ppDb)
sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg)
sqlite3_close(sqlite3*)

① 该例程打开一个指向 SQLite 数据库文件的连接,返回一个用于其他 SQLite 程序的数据库连接对象。
       如果 filename 参数是 NULL 或 ‘:memory:’,那么 sqlite3_open() 将会在 RAM 中创建一个内存数据库,这只会在 session 的有效时间内持续。
       如果文件名 filename 不为 NULL,那么 sqlite3_open() 将使用这个参数值尝试打开数据库文件。如果该名称的文件不存在,sqlite3_open() 将创建一个新的命名为该名称的数据库文件并打开。

② 该例程提供了一个执行 SQL 命令的快捷方式,SQL 命令由 sql 参数提供,可以由多个 SQL 命令组成。
       在这里,第一个参数 sqlite3 是打开的数据库对象,sqlite_callback 是一个回调,data 作为其第一个参数,errmsg 将被返回用来获取程序生成的任何错误。
       sqlite3_exec() 程序解析并执行由 sql 参数所给的每个命令,直到字符串结束或者遇到错误为止。

③ 该例程关闭之前调用 sqlite3_open() 打开的数据库连接。所有与连接相关的语句都应在连接关闭之前完成。
       如果还有查询没有完成,sqlite3_close() 将返回 SQLITE_BUSY 禁止关闭的错误消息。

3、连接数据库

       项目中的 C 代码段显示了如何连接到一个数据库。如果该数据库不存在,那么它就会被创建,最后将返回一个数据库对象。
代码如下:

	int         len;
	char        *zErrMsg = NULL;
	sqlite3     *db = NULL;

	//调用sqlite3_open(),打开.db数据库文件。若没有,则创建
 	len = sqlite3_open("temper.db",&db); 
	if (len != SQLITE_OK)	
 	{
	     fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
	  	 sqlite3_close(db);
	  	 
  	     exit(1);
	 } 
 	else
 	{
	      printf("You have opened a sqlite3 database named temper.db successfully!\n");
	}
4、创建表

       下面的 C 代码段将用于在先前创建的数据库中创建一个表:
代码如下:

	int			ret
	//创建表 如果表已存在,则无需创建;否则创建一个新表
	char        *sql = "create table if not exists temperature(sn char(10), datetime char(50), temperature  char(10))";		
	
	//调用sqlite3_exec();创建temperature表,用来存放来自客户端的数据
    ret = sqlite3_exec(db, sql, 0, 0, &zErrMsg);
    if (ret != SQLITE_OK)
    {
        sqlite3_close(db);
        printf("Creat table failure \n");
        return 0;
    }
    printf("Create table successfully!\n");

5、INSERT 操作

       下面的 C 代码段显示了如何在上面创建的 temperature表中创建记录
代码如下:

	char        sql1[128];
	
	snprintf(sql1, 128, "insert into temperature values('%s', '%s', '%s');", 
                             sn, datetime, temp);
                             
    //保证了数组sql1的内容为字符串
    sql1[127] = '\0';		
    printf("%s\n", sql1);
    
    //调用sqlite3_exec();将数据存储至temperature表中
    ret = sqlite3_exec(db, sql1, 0 , 0, &zErrMsg);
    if (ret != SQLITE_OK)		//判断返回值,如果不等于SQLITE_OK,即插入记录失败
    {
    	sqlite3_close(db);
        printf("insert data failure ; %s!\n", zErrMsg);
        
        return 0;
	}
	
    printf("insert data successfully!\n");

以上即为该项目关于sqlite3数据库的基本使用。
       注:如果读者觉得比较简单,请访问本博客中提供的数据库网址详细学习!

猜你喜欢

转载自blog.csdn.net/qq_43296898/article/details/88759248