SQLite C语言接口函数
sqlite3 *db是数据库连接对象,用来操作数据库 打开数据库对象函数 int sqlite3_open( constchar*filename,/*数据库文件名 */ sqlite3**ppDb/*创建的数据库连接对象*/ ); 关闭数据库对象函数 int sqlite3_close(sqlite3*/*打开的数据库连接对象*/); 返回数据库错误消息 constchar*sqlite3_errmsg(sqlite3*); SQLITE_OK:表示打开成功
示例: #include <stdio.h> #include <sqlite3.h>
int main(void) { /*定义一个数据库连接对象指针*/ sqlite3*db=NULL; /*初始化连接对象开辟空间*/ int rc= sqlite3_open("sqlite.db",&db); if(rc!= SQLITE_OK) { /*获取连接对象的错误信息*/ fprintf(stderr,"%sn",sqlite3_errmsg(db)); return-1; } printf("connect sucess!n");
sqlite3_close(db);//闭关数据库
return0; }
编译:gcc sqlite.c-o sqlite-I/usr/local/sqlite-3.3.7/include-L/usr/local/sqlite-3.3.7/lib-lsqlite3
执行sql语句的函数
执行sql语句函数 int sqlite3_exec( sqlite3*,/*打开的数据库连接对象*/ constchar*sql,/*将要执行的sql语句*/ int(*callback)(void*,int,char**,char**),/*回调函数*/ void*,/*回调函数的第一个参数*/ char**errmsg/*错误的消息*/ );
示例: #include <stdio.h> #include <sqlite3.h>
int main(void) { sqlite3*db=NULL; int rc= sqlite3_open("sqlite.db",&db); if(rc!= SQLITE_OK) { fprintf(stderr, sqlite3_errmsg(db)); return-1; }
char*sql1="create table if not exists stu(id integer primary key default 1,name varchar(20));"; char*sql2="insert into stu(name) values('aa');"; char*errmsg;
rc= sqlite3_exec(db, sql1,NULL,&errmsg); if(rc!= SQLITE_OK) { fprintf(stderr,"错误%sn",sqlite3_errmsg(db)); fprintf(stderr,errmsg); }
rc= sqlite3_exec(db, sql2,errmsg); }
sqlite3_close(db); return0; }
查询函数 int sqlite3_get_table( sqlite3*db, /*数据库连接对象*/ constchar*zSql,/*将要执行的sql语句*/ char***pazResult,/*查询的结果集 */ int*pnRow, /* 结果集的行数*/ int*pnColumn, /*结果集的列数*/ char**pzErrmsg /* 查询的错误消息*/ ); 释放结果集函数 void sqlite3_free_table(char**result);
示例:
#include <stdio.h> #include <sqlite3.h>
int main(void) { /*定义一个数据库连接对象指针*/ sqlite3*db=NULL; int rc; /*初始化连接对象,开辟空间*/ rc= sqlite3_open("test.db",&db);
if(rc!= SQLITE_OK) { /*获取连接对象的错误信息*/ fprintf(stderr,sqlite3_errmsg(db)); return-1; }
char*sql="select * from tbl_emp"; char**result=NULL; int rows; int cols; rc= sqlite3_get_table(db,sql,&result,&rows,&cols,NULL); if(rc!= SQLITE_OK) { /*获取连接对象的错误信息*/ fprintf(stderr,sqlite3_errmsg(db)); return-1; };
int i, flag=0; for(i=0;i<(rows+1)* cols ;i++) { if((flag++)== cols) { flag=1; printf("n"); } printf("%12s", result[i]); }
printf("n");
sqlite3_free_table(result);
/*关闭数据库,释放空间*/ sqlite3_close(db); return1; }
#include <stdio.h> #include <sqlite3.h>
int main(void) { /*定义一个数据库连接对象指针*/ sqlite3*db=NULL; int rc; /*初始化连接对象,sqlite3_errmsg(db)); return-1; }
char* name="denny"; char*sql;
char buff[200]; sprintf(buff,"select * from tbl_emp where name ='%s'",name); sql=(char*)malloc(strlen(buff)); strcpy(sql,buff);
char**result=NULL; int rows; int cols; rc= sqlite3_get_table(db,sqlite3_errmsg(db)); return-1; }; int i, result[i]); }
sqlite3_free_table(result);
printf("数据库连接成功!n"); /*关闭数据库,释放空间*/ sqlite3_close(db); return1; }
回调函数 int(*callback)( void*,/*从sqlite3_exec传递来的参数*/ int,/*结果集的列数*/ char**,/*列的值*/ char**/*列的名字*/ ) 示例: #include <stdio.h> #include <sqlite3.h>
int testcallback(void*d,int cols,char**col_values,char**col_names) { int i;
int flag=*((int*)d);
if(flag==1) { for(i=0;i< cols ;i++) { printf("%12s",col_names[i]); } printf("n"); }
for(i=0;i< cols ;i++) { printf("%12s",col_values[i]); } printf("n");
return0; }
int main(void) { /*定义一个数据库连接对象指针*/ sqlite3*db=NULL; int rc; /*初始化连接对象,&db);
if(rc!= SQLITE_OK) { /*获取连接对象的错误信息*/ fprintf(stderr,sqlite3_errmsg(db)); return-1; }
printf("数据库连接成功!n");
/*插入数据*/ char* sql="select * from tbl_emp"; char* errmsg; int flag=1; rc= sqlite3_exec(db,testcallback,&flag,&errmsg); if(rc!= SQLITE_OK) { /*获取连接对象的错误信息*/ fprintf(stderr,errmsg); return-1; }
/*关闭数据库,释放空间*/ sqlite3_close(db); return1; }
预处理对象 int sqlite3_prepare( sqlite3*db,/*数据库连接对象*/ constchar*zSql,/*将要执行的sql语句*/ int nByte,/* sql语句的长度 -1*/ sqlite3_stmt**ppStmt,/* sqlite3_stmt对象 */ constchar**pzTail/*指向执行的sql语句 0*/ ); int sqlite3_bind_text(sqlite3_stmt*,constchar*,int n,void(*)(void*)); int sqlite3_step(sqlite3_stmt*); constunsignedchar*sqlite3_column_text(sqlite3_stmt*,int iCol); int sqlite3_finalize(sqlite3_stmt*pStmt);
示例: #include <stdio.h> #include <sqlite3.h>
int main(void) { /*定义一个数据库连接对象指针*/ sqlite3*db=NULL; int rc; /*初始化连接对象,sqlite3_errmsg(db)); return-1; } char* name="denny"; char* sql="select * from tbl_emp where name=? and id=?"; sqlite3_stmt*stmt=NULL; rc= sqlite3_prepare(db,-1,&stmt,NULL);
sqlite3_bind_text(stmt,1,name,strlen(name),NULL);
sqlite3_bind_int(stmt,2,2);
sqlite3_step(stmt); printf("id=%dn",sqlite3_column_int(stmt,0)); printf("name=%sn",sqlite3_column_text(stmt,1));
sqlite3_finalize(stmt);
printf("数据库连接成功!n"); /*关闭数据库,释放空间*/ sqlite3_close(db); return1; }
#include <stdio.h> #include <sqlite3.h>
int main(void) { /*定义一个数据库连接对象指针*/ sqlite3*db=NULL; int rc; /*初始化连接对象,sqlite3_errmsg(db)); return-1; }
char* sql="select * from tbl_emp"; sqlite3_stmt*stmt=NULL; rc= sqlite3_prepare(db,NULL); sqlite3_step(stmt); printf("id=%dn",1));
sqlite3_step(stmt); printf("id=%dn",1));
sqlite3_finalize(stmt);
printf("数据库连接成功!n"); /*关闭数据库,释放空间*/ sqlite3_close(db); return1; }
预处理对象重复使用 #include <stdio.h> #include <sqlite3.h>
int main(void) { /*定义一个数据库连接对象指针*/ sqlite3*db=NULL; int rc; /*初始化连接对象,sqlite3_errmsg(db)); return-1; } char* name="annie"; char* sql="select * from tbl_emp where name=?"; sqlite3_stmt*stmt=NULL; rc= sqlite3_prepare(db,1)); printf("-------n"); sqlite3_reset(stmt); sqlite3_bind_text(stmt,"denny",strlen("denny"),释放空间*/ sqlite3_close(db); return1; }
事务 事务是数据库最小处理单元 事务的四个特性: 1.原子性 2.隔离性 3.一直性 4.持久性
sqlite如何使用事务 1.begin trasaction 2.rollback--回滚(取消) 3.commit--提交 4.sqlite3_exec(db,"begin trasaction",NULL) 5.sqlite3_exec(db,"commit",NULL) 6.sqlite3_exec(db,"rollback",NULL)
#include <stdio.h> #include <sqlite3.h>
int main(void) { /*定义一个数据库连接对象指针*/ sqlite3*db=NULL; int rc; /*初始化连接对象,sqlite3_errmsg(db)); return-1; }
printf("数据库连接成功!n");
/*插入数据*/ char* sql1="insert into tbl_emp(id,name,age,birthday) values(5,'denny',32,date('1977-06-28'))"; char* sql2="insert into tbl_emp(id,date('1977-06-28'))"; char* errmsg; rc= sqlite3_exec(db,"begin transaction",&errmsg); rc= sqlite3_exec(db,sql1,sql2,errmsg); sqlite3_exec(db,"rollback transaction",&errmsg); return-1; } sqlite3_exec(db,"committransaction",&errmsg);
/*关闭数据库,释放空间*/ sqlite3_close(db); return1; }
其它: #include <stdio.h> #include <sqlite3.h> #include <fcntl.h> int main(void) { /*定义一个数据库连接对象指针*/ sqlite3*db=NULL; int rc; /*初始化连接对象,sqlite3_errmsg(db)); return-1; }
printf("数据库连接成功!n");
/*插入数据*/ char* sql="insert into tbl_emp(id,photo) values(7,?)";
sqlite3_stmt* stmt=NULL; rc= sqlite3_prepare(db,NULL);
/*读取一个文件*/ int fd= open("logo.gif",O_RDONLY); int buff[1024*8]; int len= read(fd,buff,sizeof(buff)); sqlite3_bind_blob(stmt,len,NULL); sqlite3_step(stmt); if(rc!= SQLITE_OK) { /*获取连接对象的错误信息*/ fprintf(stderr,sqlite3_errmsg(db));
return-1; }
/*关闭数据库,释放空间*/ sqlite3_close(db); return1; }
#include <stdio.h> #include <sqlite3.h> #include <fcntl.h> int main(void) { /*定义一个数据库连接对象指针*/ sqlite3*db=NULL; int rc; /*初始化连接对象,sqlite3_errmsg(db)); return-1; }
printf("数据库连接成功!n");
/*插入数据*/ char* sql="select photo from tbl_emp where id =7";
sqlite3_stmt* stmt=NULL; rc= sqlite3_prepare(db,NULL); sqlite3_step(stmt); constvoid*pimage= sqlite3_column_blob(stmt,0); int size= sqlite3_column_bytes(stmt,0);
/*读取一个文件*/ int fd= open("logo1.gif",O_WRONLY|O_CREAT,0777);
write(fd,pimage,size);
if(rc!= SQLITE_OK) { /*获取连接对象的错误信息*/ fprintf(stderr,释放空间*/ sqlite3_close(db); return1; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |