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,"commit transaction",&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; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |