C语言封装sqlite3_API
来源:互联网 发布:淘宝质量问题赔钱 编辑:程序博客网 时间:2024/05/16 05:41
//执行类似insert,update,create,drop这些不需要结果的sql语句。
int executeNoQuery(sqlite3 *db,const char *sql) { sqlite3_stmt *pstmt = NULL; if(sqlite3_prepare_v2(db,sql,strlen(sql),&pstmt,NULL) != SQLITE_OK) { if(pstmt != NULL) sqlite3_finalize(pstmt); fprintf(stderr,"%s\n",sqlite3_errmsg(db)); return -1; } if(sqlite3_step(pstmt) != SQLITE_DONE) { sqlite3_finalize(pstmt); fprintf(stderr,"%s\n",sqlite3_errmsg(db)); return -1; } if(pstmt != NULL) sqlite3_finalize(pstmt); return 0; }
//执行select查询语句
void executeWithQuery(sqlite3 *db,char ***result,int *col,const char *sql) { int ret,row; char *errMsg; ret = sqlite3_get_table(db,sql,result,&row,col,&errMsg); if(ret != SQLITE_OK) { fprintf(stderr,"%s\n",errMsg); sqlite3_free(errMsg); return; } (*result)[(row+1)*(*col)] = NULL; return; }
调用规则:
executeNoQuery:
只需传入数据库连接,和想要执行的sql语句
executeWithQuery:除了需要传入数据库连接,以及最后一个参数sql语句,还需要传入char **array,和int ncol的地址下面是一个例子:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sqlite3.h>#define PRINTERROR(str)\do{\perror(str);\exit(EXIT_FAILURE);\}while(0)const char *createSQL = "create table if not exists T_Students\(S_id integer PRIMARY KEY NOT NULL,\S_name varchar(128),S_age integer,\Time TimeStamp NOT NULL DEFAULT (datetime('now','localtime')));";const char *deleteSQL = "delete from T_Students where S_name='sagarfan';";const char *updateSQL = "update T_Students set S_age=25 where S_name='sagarfan';";const char *insertSQL = "insert into T_Students (S_name,S_age) values('sagarfan',23);";const char *selectSQL = "select S_name,S_age from T_Students;";int executeNoQuery(sqlite3 *db,const char *sql);int executeWithQuery(sqlite3 *db,char ***result,int *col,const char *sql);int main(){sqlite3 *conn = NULL;int i,ret,ncol;char sql[1024]={0}; char **array;ret = sqlite3_open("stu.sqlite",&conn);if(ret != SQLITE_OK)PRINTERROR(sqlite3_errmsg(conn));//create tableret = executeNoQuery(conn,createSQL);if(ret == -1)PRINTERROR(sqlite3_errmsg(conn));ret = executeNoQuery(conn,insertSQL);if(ret == -1)PRINTERROR(sqlite3_errmsg(conn));ret = executeWithQuery(conn,&array,&ncol,selectSQL);if(ret == -1)PRINTERROR(sqlite3_errmsg(conn));i=0;while(array[i+ncol] != NULL){printf("Name=%s\n",array[i+ncol]);printf("Age=%s\n",array[i+1+ncol]);i+=ncol;}sqlite3_free_table(array);ret = executeNoQuery(conn,updateSQL);if(ret == -1)PRINTERROR(sqlite3_errmsg(conn));if(conn != NULL)sqlite3_close(conn);return 0;}int executeNoQuery(sqlite3 *db,const char *sql){sqlite3_stmt *pstmt = NULL;if(sqlite3_prepare_v2(db,sql,strlen(sql),&pstmt,NULL) != SQLITE_OK){if(pstmt != NULL)sqlite3_finalize(pstmt);return -1;}if(sqlite3_step(pstmt) != SQLITE_DONE){sqlite3_finalize(pstmt);return -1;}sqlite3_finalize(pstmt);return 0;}int executeWithQuery(sqlite3 *db,char ***result,int *col,const char *sql){int ret,row;ret = sqlite3_get_table(db,sql,result,&row,col,NULL);if(ret != SQLITE_OK){return -1; } (*result)[(row+1)*(*col)] = NULL;return 0;}
注意:
调用完executeWithQuery之后,记得释放array
0 0
- C语言封装sqlite3_API
- c语言数据封装
- C语言封装dll
- C语言实现封装
- C语言封装disruptor
- C语言实现封装
- C语言对寄存器封装
- C语言实现封装,继承
- <C语言>头文件封装
- 【C/C++】C语言字符串库封装
- 模块的封装(一):C语言类的封装
- 用C语言封装的线性表
- 用C语言封装的链表
- 用C语言封装数据与方法
- C语言封装自己的日志函数
- 结构体封装(C语言)
- C语言结构体封装艺术
- 用C语言封装Windows程序
- Bitmap使用
- android 引用第三方jar java.lang.NoClassDefFoundError解决方法
- .9.png总结
- 监控
- 文章标题
- C语言封装sqlite3_API
- 在线文件转换
- Android RSA加密解密
- 敏捷方法论:极限编程 一次反思
- 使用maven profile实现多环境可移植构建
- Ecplise安装git及其使用
- 什么是大数据时代?
- 回调函数
- 初学编程者之建议(-)