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数据库的基本使用。
注:如果读者觉得比较简单,请访问本博客中提供的数据库网址详细学习!