数据库:SQlite3的C接口相关函数
来源:互联网 发布:c语言编写驱动程序 编辑:程序博客网 时间:2024/05/18 02:33
一、内容介绍
我们在之前的文章中介绍到了SQlite数据库的相关内容及在命令下对数据库的相关操作,但我们通常是在项目中对数据库进行使用,这也就限制了我们不能运用命令行进行操作,但SQlite3给我们提供了相关的C接口,这是我们同样可以运用函数的形式运用嵌入式数据库。
二、相关的SQlite3函数
1、sqliite3_open
函数的原型:int sqlite3_open(const char * dbname,sqlite3 **db);
函数的作用:打开一个数据库,若该数据库不存在,则自动创建该数据库
头文件:#include <sqlite3.h>
参数:dbname:待打开的数据库的文件名称
db:数据库的句柄(相当于数据库的描述符)
返回值:执行成功,返回SQLITE_OK(0);
执行出错,返回其他错误信息(非0值)
2、sqlite3_close
函数的原型:int sqlite3_close(sqlite3 *pDB);
函数的作用:关闭一个打开的数据库
头文件:#include <sqlite3.h>
参数:pDB:数据库的句柄
返回值:执行成功,返回SQLITE_OK(0);
执行出错,返回其他错误信息(非0值)
3、sqlite3_errmsg
函数的原型:const char * sqlite3_errmsg(sqlite3 *pDB);
函数的作用:获取最近调用的API接口返回的错误说明,并在下次调用任何sqlite API函数时自动清除
头文件:#include <sqlite3.h>
参数:pDB:数据库的句柄
返回值:错误说明的字符串指针
4、sqlite3_exec
函数的原型:int sqlite3_exec(sqlite3 *db,const char * sql,int(*callback)(void *,int,char *,char **),void *para,char **errmsg);
函数的作用:编译或者执行0个或多个sql语句,查询结果返回给回调函数
头文件:#include <sqlite3.h>
参数:
db:数据库的句柄
sql:sql语句
para:用户传入的参数,可以为NULL,该参数指针最终会传入到回调函数callback中,供给用户在回调函数中使用
callback:回调函数
errmsg:返回的错误信息
返回值:执行成功,返回SQLITE_OK(0);
执行出错,返回错误信息
回调函数:sqlite_callback()
函数的原型:typedef int (*sqlite_callback)(void * para,int columncount,char ** columnvalue,char ** columnname);
函数的作用:由用户处理sqlite3_exec的查询结果
参数:
para:从sqlite3_exec函数传染的参数指针
columncount:查询的记录的字段数(即查询到的记录的列数)
columnvalue:保存查询到的记录的数据,它为一个一维数组,每个元素都为char**型,是一个字段内容(用字符串表示,‘\0’结尾)
columnname:与columnvalue对应,表示这个字段的名称
返回值:执行成功,返回SQLITE_OK;执行错误,返回其他值
5、sqlite3_get_table
函数的原型:int sqlite3_get_table(sqlite3*pDB,const char *sql,char ***pResult,int *rowcount,int * columncount,char **errmsg);
函数的作用:执行sql语句,通过一维数组返回结果,一般该函数用于数据记录查询
头文件:#include <sqlite3.h>
参数:
pDB:数据库的句柄
sql:SQLite3语句
pResult:用于保存查询到的结果
rowcount:结果集的行数
columncount:结果集的列数
errmsg:错误的信息
返回值:执行成功,返回SQLITE_OK;执行出错,返回其他值
相应的函数:sqlite3_free_table(char **result);
函数的作用:释放查询到的结果集占用的内存
参数:result:通过函数sqlite3_get_table()查询到的记录结果
三、SQlite3 C函数使用实例
#include <stdio.h>#include <sqlite3.h>#include <stdlib.h> void create_table(sqlite3 *db) //创建关系 { char *sql = "create table if not exists mytable (id integer primary key, name text)"; char *errmsg; int ret; ret = sqlite3_exec(db, sql, NULL, NULL, &errmsg); if (ret != SQLITE_OK) { printf("create table error:%s\n", errmsg); exit (-1); } }void insert_record(sqlite3 *db)//向数据库插入信息{char sql[100];char *errmsg;int ret;int id;char name[20];printf("please input id and name :\n");//输入姓名和idscanf("%d %s",&id, name );sprintf(sql,"insert into mytable (id, name) values (%d,'%s' );", id, name);ret = sqlite3_exec(db, sql, NULL, NULL, &errmsg);if(ret != SQLITE_OK){printf("insert record error :%s\n", errmsg);exit (-1);}}int displaycb(void *para, int ncolumn, char **columnvalue, char *columnname[])//回调函数显示方式{int i;printf("total column is %d\n", ncolumn);for(i = 0;i < ncolumn; i++){printf("col_name:%s---> col_value:%s\n", columnname[i], columnvalue[i]);}printf("========================\n");return 0;}void inquire_usecb(sqlite3 *db){ char *sql="select * from mytable"; char *errmsg; int ret; ret = sqlite3_exec(db, sql, displaycb, NULL, &errmsg); //通过调用回调函数显示数据 if(ret != SQLITE_OK){printf("select error:%s\n", errmsg);exit (-1);}}void inquire_nocb(sqlite3 *db) //通过sqlite3_get_table函数显示数据{ int nrow, ncolumn; char **azresult; char *errmsg; int ret; int i; sql = "select * from mytable"; ret = sqlite3_get_table(db,sql, &azresult, &nrow, &ncolumn, &errmsg); if(ret != SQLITE_OK){printf("get table error:%s",errmsg);exit(-1);}printf("nrow = %d, column = %d\n", nrow, ncolumn);for(i = ncolumn; i < (nrow + 1)*ncolumn; i++){ printf("%10s",azresult[i] ); if((i + 1) % ncolumn == 0) printf("\n");}sqlite3_free_table(azresult);}int main(){sqlite3 *db;int rc;rc = sqlite3_open("mydatabase.db", &db);//打开已有数据库if(rc != SQLITE_OK){pritnf("can not open datatbase!\n");exit (-1);}elsepritnf(" open datatbase sucess!\n");create_table(db);insert_record(db);inquire_nocb(db);inquire_usecb(db)sqlite3_close(db);return 0;}
- 数据库:SQlite3的C接口相关函数
- sqlite3常用的c语言函数接口
- sqlite3的C接口
- SQLITE3的C接口
- sqlite3的c/c++接口
- SQLITE3 C语言接口 API 函数简介
- Sqlite3相关的数据库的大小限制
- sqlite3: 一个SQLite数据库的命令行接口
- sqlite3: 一个SQLite数据库的命令行接口
- sqlite3: 一个SQLite数据库的命令行接口
- sqlite3: 一个SQLite数据库的命令行接口
- sqlite3数据库和表的相关命令
- c语言的sqlite3接口的设计
- sqlite3数据库相关
- SQLite3接口函数
- 使用sqlite3与C接口开发数据库程序 - [编程]
- 使用sqlite3与C接口开发数据库程序
- 使用sqlite3与C接口开发数据库程序
- android6.0 读取sd卡 open failed: EACCES (Permission denied)解决方法
- Telnet模拟HTTP请求
- HDU 5936搜索
- 数字字符与数字之间的相互转化
- win7 64位操作系统安装python2.7,numpy,matplotlib,scipy,scikit-learn,pandas等
- 数据库:SQlite3的C接口相关函数
- Java断言:assert
- Android弹幕功能实现,模仿斗鱼直播的弹幕效果
- 4.一些关简单的键字.package,private,this
- Leetcode||14.Longest Common Prefix
- “玲珑杯”ACM比赛 Round #4 E题
- dht11模块的学习
- 嵌入式驱动编写-第一个驱动程序
- 文件属性分析