Sqlite3数据库 C语言用法
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:关闭数据库资源
#include
#include
#include #define _DEBUG_ 0int 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){//或者直接是rcfprintf(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;
}
2.在程序中对表格进行更新
对表格数据进行更新函数,使用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 ;
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
