C语言对sqlite数据库的操作

目录

  • sqlite的安装
  • sqlite的基本命令
  • C语言使用API函数操作sqlite数据库

在嵌入式开发中,有时会需要用到数据库对批量数据进行管理,但是常见的数据库如mysql 、SQL Server、Oracle、Sybase、DB2消耗的资源相对于嵌入式系统太过巨大,通常无法在嵌入式系统上运行,因此在嵌入式开发中往往用到sqlite数据库

sqlite的安装

在命令行界面输入以下命令即可安装

sudo apt-get install sqlite3

sqlite的基本命令

sqlite和sqlplus语句类似,且sqlite每行命令必须以“;”结尾!

  • 创建一个表
create table temperature(id integer primary key autoincrement,sn char(32),time char(32),temperature float);

创建一个名为temperature的表(create table temperature),设置主键自增(id integer primary key autoincrement),表中含有sn,time和temperat三个字段(sn char(32),time char(32),temperature float)
主键自增是sqlite提供的一个很实用的功能,设置主键自增后,表中不需要指定主键,表会自动生成一个主键并随插入数据条数自动增加,主键的列名通常为rowid

  • 插入数据

(1)插入全部数据

insert into temperature values(NULL,2020,2020/02/02,20.00);

向temperat表中插入一行数据,如果设置主键自增第一个数据则插入“NULL”

(2)插入部分数据

insert into temperat (sn,temper)values(2020,20.00);
  • 查询数据

(1)查询全部数据

select * from terperature;

(2)查询部分数据

select sn,time from temperature;

(3)条件查询

select * from temperature where sn=2020 and temper=20.00;//同时满足

select * from temperature where sn=2020 or temper=20.00;//或者满足

C语言使用API函数操作sqlite数据库

  • 打开数据库
int sqlite3_open(char *path, sqlite3 **ppDb)

sqlite3_open函数用来打开一个已存在的数据库,若数据库不存在则创建一个数据库,第一个参数为创建数据库的路径,第二个参数ppDb为指向数据库句柄的指针
如果sqlite3_open执行成功,则返回SQLITE_OK;若不成功,可以使用sqlite3_errmsg()函数对出错原因进行解析

  • 数据库操作中的strerror()函数sqlite3_errmsg()
sqlite3_errmsg(sqlite3 **ppDb)

sqlite3_errmsg()函数与strerror()函数类似,用来把数据库API函数出错产生的错误码解析为字符串,其参数为指向数据库句柄的指针与其他数据库API函数相同

  • 对数据库进行操作

(1)sqlite3_exec()函数

int sqlite3_exec(
   sqlite3* ppDb,                             /* An open database */
   const char *sql,                           /* SQL to be evaluated */
   int (*callback)(void*,int,char**,char**),  /* Callback function */
   void *,                                    /* 1st argument to callback */
   char **errmsg                              /* Error msg written here */
 );

函数功能:执行sql指定的数据库命令操作。 参数说明: ppDb:splite3_open操作时的第二个参数dB数据操作句柄
sql:SQL命令,可以有多条命令组成 callback:执行完该函数的回调函数,只有sql为查询语句的时候才会执行此语句。 void *
: 作为callback回调函数的第一个参数传入 errmsg:获取函数错误是的错误码

(2)回调函数

int sqlite_callback( 
  void*      para, 
  int         f_num, 
  char**    f_value, 
  char**    f_name
); 

说明:每找到一条记录自动执行一次回调函数

para:传递给回调函数的参数

f_num:记录中包含的字段数目

f_value:包含每个字段值的指针数组

f_name:包含每个字段名称的指针数组

返回值:成功返回0,失败返回-1

(3)sqlite3_get_table()

int sqlite3_get_table(
   sqlite3 *ppDb,          /* An open database */
   const char *zSql,     /* SQL to be evaluated */
   char ***dbResult,     /* 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 */
   );

函数功能:获取数据库表格 函数参数: ppDb:同上 zSql:SQL命令
dbResult:查询结果,它依然是一维数组,它内存布局是:字段名称,后面是紧接着是每个字段的值。
pnRow:查出具体有多少行,即多少条记录(不包括字段名那行)。 pnColumn:查出具体有多少列,即多少字段 pzErrmsg:错误信息

注:dbResult的内存结构

通过select * from
age;给dbResult的字符前n个(0,n)为字段名称(只有计算机认识),dbResult[n]以后分别代表字段的值(包括dbResult[n])。如图
* * * * …* (dbResult[0]~[n-1]分别代表字段名) dbResult[n] [n+1] [n+2]
[n+3]…[n+n-1] (dbResult[n]~[n+n-1]分别代表第一条记录的值) dbResult[2n]
[2n+1] [2n+2] [2n+3]…2n+n-1
dbResult[3n] [3n+1] [3n+2]
32n+3]…3n+n-1
注:sqlite3_get_table()之后便将以上的n(字段数:简称列)给了nColumn这个变量,可直接应用。nRow变量代表共有多少条记录,可直接应用。
2、通过select * from age where
id=0;如果查到0条记录的话nRow等于0,查到1条记录的话nRow等于1,假设查到1条数据,举例:
* * * * …* (dbResult[0]~[n-1]分别代表字段名) dbResult[n] [n+1] [n+2]
[n+3]…[n+n-1] (dbResult[n]~[n+n-1]分别代表第一条记录的值)
注:此时dbResult[]只有0~2n-1共2n个字符,此时如果对dbResult[2n]引用的话就会出错。查询两条语句的话以此类推。
* * * * …* (dbResult[0]~[n-1]分别代表字段名) dbResult[n] [n+1] [n+2]
[n+3]…[n+n-1] (dbResult[n]~[n+n-1]分别代表第一条记录的值) dbResult[2n]
[2n+1] [2n+2] [2n+3]…2n+n-1
注:此时dbResult[]只有0~3n-1可引用

注:
(1)dbResult中所储存的数据可以通过赋值语句(加类型转换函数)直接使用,如

temper=atof(dbResult[7]);

(2)sqlite3_get_table()及其他API函数所用到的ppDb必须是由同一个函数中调用sqlite3_open()函数获取的,因为sqlite3_open()所产生的ppDb在其所在函数之外将被释放

实例操作待更

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值