基于C的Linux下嵌入式数据库SQLite的CRUD编程
《基于C的Linux下嵌入式数据库SQLite的CRUD编程》要点: 将演示SQLite的基本使用,这个例子讲解了如安在SQLite中增加记录、查询记录、创建数据表等操作.另外本例子,也演示了如何编译以及执行一个SQLite的应用程序例子. 结合上面的介绍,下面以一个完整的例子,讲解如何利用SQLite查询指定的数据表中的信息. 具体的编程流程为: (1)连接指定数据库,test.db (2)向数据表data_txt_table中添加一条记录; (3)读取数据表data_txt_table中的全部记录,并按顺序显示; (4)关闭数据库连接. 1.法式的源码 法式的主要源码如下所示: #include <stdio.h> #include <sqlite3.h> int main( void ) { sqlite3 *pdb = NULL; char *szErrMsg = 0; int rc; int i = 0; //打开指定的数据库文件,如果不存在将创建一个同名的数据库文件 rc = sqlite3_open("test.db",&pdb); if( rc ) { fprintf(stderr,"Can't open database: %s",sqlite3_errmsg(pdb)); sqlite3_close(pdb); return 0; } // 创建一张新数据表 //创建一个表,如果该表存在,则不创建,并给出提示信息,存储在 zErrMsg 中 char *strSql = " CREATE TABLE test_table (ID INTEGER PRIMARY KEY,name VARCHAR(12));"; sqlite3_exec(pdb,strSql,&szErrMsg ); // 向数据表中添加二条记录 strSql = "INSERT INTO test_table VALUES( 1,'tom');"; sqlite3_exec(pdb,&szErrMsg ); strSql = "INSERT INTO test_table VALUES( 2,'Jim');"; sqlite3_exec(pdb,&szErrMsg ); // 查询所有记录 int nRow = 0,nColumn = 0; char **pResult; //二维数组存放成果 strSql = "SELECT * FROM test_table "; sqlite3_get_table(pdb,&pResult,&nRow,&nColumn,&szErrMsg ); printf("Query recond %d n ID Name:n",nRow); for(; i<(nRow+1)*nColumn;i++) { printf("%s ",pResult[i]); if(i % 2 == 0) printf("n"); } //释放掉 azResult 的内存空间 sqlite3_free_table(pResult); sqlite3_close(pdb); //关闭数据库 return 0; } 2.编译 SQLite的编译参数为: gcc SQLiteTest.c -o SQLiteTest -lsqlite3 -L/usr/local/sqlite3/lib -I/usr/local/sqlite3/include -static -lpthread 编译参数介绍: (1)-lsqlite3用于链接SQLite的开发库; (2)-lpthread用于链接多线程库; (3)-L/usr/local/sqlite3/lib 用于指示SQLite中链接库的路径,默认的安装路径为/usr/local/sqlite3/lib,当然读者可以根据本身的实际安装路径进行配置; (4)-I/usr/local/sqlite3/include用于指示SQLite中sqlite3.h头文件所在的目录,当然/usr/local/sqlite3/include为默认安装路径,读者在本身的项目中要根据实际安装的路径进行配置; (5)-static用于静态编译,如果不加上该选项,有时候在编译会提示无法找到动态链接库. 3.运行 法式在具体的编译通过后,会生成珍上SQLiteTest的可执行文件,在Shell命令中输入./SQLiteTest即可以执行该法式: [root@locathost SQLite]./SQLiteTest 法式具体的运行效果如下图所示: 《基于C的Linux下嵌入式数据库SQLite的CRUD编程》是否对您有启发,欢迎查看更多与《基于C的Linux下嵌入式数据库SQLite的CRUD编程》相关教程,学精学透。编程之家PHP学院为您提供精彩教程。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |