sqlite3数据库跟sqlite的使用方式相同,因此我使用的时候照着sqlite的教学来的。
1.sqlite3的数据库初始化由于设备重新上电以后,需要重新执行代码,如果我们的代码中使用insert方式,那么开机两次,就会insert两轮数据。因此我们在设备上先创建号一张数据表。代码如下,创建一张具有六十个数据的表。在设备中执行完以后,将表格提取出来,我们的程序中只需要对其update更新表格的数据就行了。
sqlite3_open:创建一个数据库,名称为raindat.db
sqlite3_exec:对数据库中执行存储在sql数组的命令。如果不清楚的话,建议去看看sqlite3的语法规则。
sqlite3_get_table:获取表格的数据,最终返回到result的二级指针中。
sqlite3_free_table:释放table表格资源
sqlite3_close:关闭数据库资源
#include2.在程序中对表格进行更新#include #include #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: %sn",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("%sn" , 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:%dn",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("%sn",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}; if(sqlite3_open(DB_RAINFALL , &db) != SQLITE_OK){ printf("%sn" , 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 ; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)