赞
踩
sqlite3数据库跟sqlite的使用方式相同,因此我使用的时候照着sqlite的教学来的。
由于设备重新上电以后,需要重新执行代码,如果我们的代码中使用insert方式,那么开机两次,就会insert两轮数据。因此我们在设备上先创建号一张数据表。代码如下,创建一张具有六十个数据的表。在设备中执行完以后,将表格提取出来,我们的程序中只需要对其update更新表格的数据就行了。
sqlite3_open:创建一个数据库,名称为raindat.db
sqlite3_exec:对数据库中执行存储在sql数组的命令。如果不清楚的话,建议去看看sqlite3的语法规则。
sqlite3_get_table:获取表格的数据,最终返回到result的二级指针中。
sqlite3_free_table:释放table表格资源
sqlite3_close:关闭数据库资源
- #include <stdio.h>
- #include <sqlite3.h>
- #include <stdlib.h>
-
- #define _DEBUG_ 0
-
- int main( void )
- {
- sqlite3 *db=NULL;//声明sqlite关键结构指针
- char *zErrMsg = 0;
- int rc;
-
- //打开或创建一个数据库文件
- rc = sqlite3_open("raindat.db", &db); //打开指定的数据库文件,如果不存在,将创建一个同名的数据库文件,需要传入db这个指针的指针,因为sqlite3_open函数要为这,个指针分配内存,好要让db指针指向这个内存区
- if(rc!=SQLITE_OK){//或者直接是rc
- 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 query.db successfully!\nCongratulation! Have fun!\n");
-
- //创建一个表
- char sql[128];
- int i = 0;
-
- if(sqlite3_exec(db , "create table if not exists raindata(id integer , mincnt integer);" ,NULL , NULL, &zErrMsg) != SQLITE_OK){
- printf("%s\n" , zErrMsg);
- }
-
- //插入数据
- for(i = 0 ; i < 60 ; i ++){
- sprintf(sql ,"insert into raindata values(%d,255);" , i);
- sqlite3_exec(db,sql,0,0,&zErrMsg);
- }
-
- int row=0,column=0;//用于记录下面结果集中的行数和列数
- char **result;//二维数组用于存放结果
-
- //查询数据
- sprintf(sql ,"select * from raindata");
- sqlite3_get_table(db,sql,&result,&row,&column,&zErrMsg);
-
- printf("row:%d column:%d\n",row,column);
- printf("\nThe result of querying is:\n");
-
- //输出查询的数据
- for(i=0;i<(row+1)*column;i++){
- if(i % 2 == 0)
- printf("%s:\t",result[i]);
- else if(i % 2 == 1)
- printf("%s\n",result[i]);
- }
-
- sqlite3_free_table(result);//释放result的内存空间
-
- sqlite3_close(db); //关闭数据库
- return 0;
- }
对表格数据进行更新函数,使用update命令进行更新。话不多说,show you the code
- static void DB_Write_a_data(int min , int raincnt)
- {
- int i;
- sqlite3 *db;
- char *zErrMsg = 0;
- char sql[64] = {0};
-
- /* char *sql = "create table raindata(id integer,mincnt integer); */
- if(sqlite3_open(DB_RAINFALL , &db) != SQLITE_OK){
- printf("%s\n" , sqlite3_errmsg(db));
- return ;
- }
- for(i = 0; i < 60 ; i++){
- sprintf(sql, "update %s set mincnt = %d where id = %d" ,DB_TBL_RAINDATA ,raincnt ,min);
- if(sqlite3_exec(db , sql , NULL , NULL , &zErrMsg) != SQLITE_OK){
- perror("Error: sqlite3_exec");
- }
- }
-
- sqlite3_close(db);
-
- return ;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。