当前位置: 首页 > news >正文

linux学习——数据库API创建

一.API操作

1.int sqlite3_open(char *filename,sqlite3 **db)
        功能:打开sqlite数据库
        参数:
                filename:数据库文件路径
                db:指向sqlite句柄的指针 (splite3* db;)
        返回值:
                成功返回0,失败返回错误码(非0值)

                成功返回SQLITE_OK


2.int sqlite3_close(sqlite3 *db);
        功能:关闭sqlite数据库
        参数:
                db 操作数据库的指针
        返回值:
                成功返回0,失败返回错误码
3.const char *sqlite3_errmsg(sqlite3 *db);
        功能:通过DB句柄得到数据库操作的错误信息
        参数:
                db 操作数据库的指针
        返回值:
                返回错误信息的首地址

4.int sqlite3_exec(

                                  sqlite3*db,

                                  const char *sql,
                                  int (*callback)(void *,int,char**,char *8)
                                  void *,
                                 char **errmsg);

                        功能:执行一条sql语句
        参数
                db:数据库操作句柄
                sql:一条sql语句
                callback:回调函数,只有sql为查询语句的时候,
                        才会执行此语句
                void * :给回调函数传递参数
                errmsg:错误信息
        返回值:
                成功:SQLITE_OK


int (*callback)(void *,int,char**,char *8)
功能:查询结果,是一个函数指针类型,传递一个函数名

用到第三方库需要 -lsqlite3

回调函数接口:
typedef int(*sqlite3_callback)(
                                                void *para,
                                                int f_num,
                                                char ** f_value,
                                                char ** f_name)
        功能: 每找到一条记录自动执行一次回调函数
                para:传递给回调函数的参数
                f_num:记录中包含的字段数目
                f_value:包含每个字段值的指针数组
                f_name:包含每个字段名称的指针数组
        返回值

                成功返回0,失败返回-1

int callback(void *para,int f_num,char **f_value,char **f_name)
{int i=0;for(i=0;i<f_num;i++){printf("%s",f_value[i]);}putchar(10);return 0;
}
int do_query(sqlite3 *db)
{char sql[128]={0};char *errmsg;sprintf(sql,"select * from stu");if(sqlite3_exec(db,sql,callback,NULL,&errmsg) !=SQLITE_OK){printf("%s\n",errmsg);exit(0);}else{printf("query success\n");}return 0;
}

不使用回调函数执行SQL语句
int sqlite3_get_table(
                                        sqlite3 *db,
                                        const char *sql,
                                        char ***resultp,
                                        int *nrow, // 相当于行
                                        int *ncolumu,//列
                                        char **errmsg)

功能:执行sql操作
        db:数据库句柄
        sql:sql语句
        resultp:用来指向sql执行结果的指针
        nrow:满足条件的记录的数目
        ncolumn:每条记录包含的字段数目
        errmsg:错误信息指针的地址
返回值:

        成功返回0,失败返回错误码

这是没有打印抬头的

int  do_query2(sqlite3 *db)
{char sql[128] ={};char *errmsg;char **resultp;int nrow;int ncloumn;int i,j,index;sprintf(sql,"select * from stu");if(sqlite3_get_table(db,sql,&resultp,&nrow,&ncloumn,&errmsg) !=SQLITE_OK){printf("%s",errmsg);}else{printf("query success\n");}index =ncloumn;for(i=0;i<nrow;i++){for(j=0;j<ncloumn;j++){printf("%-11s",resultp[index++]);}putchar(10);}
}

加上代码之后

 for(j=0;j<ncloumn;j++){printf("%-11s",resultp[j]);}putchar(10);

数据库API创建的全部代码

#include<stdio.h>
#include<stdlib.h>
#include <sqlite3.h>#define DATABASE "student.db"
int do_insert(sqlite3 *db)
{int id;char name[32]={0};int score;char sql[128]={0};char* errmsg;printf("please input id:");scanf("%d",&id);getchar();printf("please input name:");scanf("%s",name);getchar();printf("please input score:");scanf("%d",&score);getchar();sprintf(sql,"insert into stu values(%d,'%s',%d);",id,name,score);if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) !=SQLITE_OK){printf("%s\n",errmsg);exit(0);}else{printf("insert success\n");}return 0;
}
int do_delete(sqlite3 *db)
{int id;char sql[128]={0};char *errmsg;printf("please input id:");scanf("%d",&id);getchar();sprintf(sql,"delete from stu where id=%d;",id);if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) !=SQLITE_OK){printf("%s\n",errmsg);exit(0);}else{printf("delete success\n");}return 0;
}
int do_update(sqlite3 *db)
{int id;char sql[128] ={0};int score;char *errmsg;printf("please input id:");scanf("%d",&id);getchar();printf("please input score:");scanf("%d",&score);getchar();sprintf(sql,"update stu set score =%d where id=%d;",score,id);if(sqlite3_exec(db,sql,NULL,NULL,&errmsg)  !=SQLITE_OK){printf("%s\n",errmsg);exit(0);}else{printf("update success\n");}return 0;
}
int callback(void *para,int f_num,char **f_value,char **f_name)
{int i=0;for(i=0;i<f_num;i++){printf("%s",f_value[i]);}putchar(10);return 0;
}
int do_query1(sqlite3 *db)
{char sql[128]={0};char *errmsg;sprintf(sql,"select * from stu");if(sqlite3_exec(db,sql,callback,NULL,&errmsg) !=SQLITE_OK){printf("%s\n",errmsg);exit(0);}else{printf("query success\n");}return 0;
}
int  do_query2(sqlite3 *db)
{char sql[128] ={};char *errmsg;char **resultp;int nrow;int ncloumn;int i,j,index;sprintf(sql,"select * from stu");if(sqlite3_get_table(db,sql,&resultp,&nrow,&ncloumn,&errmsg) !=SQLITE_OK){printf("%s",errmsg);}else{printf("query success\n");}index =ncloumn;for(j=0;j<ncloumn;j++){printf("%-11s",resultp[j]);}putchar(10);for(i=0;i<nrow;i++){for(j=0;j<ncloumn;j++){printf("%-11s",resultp[index++]);}putchar(10);}
}
int main()
{char *errmsg;sqlite3* db;int cmd;if(sqlite3_open(DATABASE,&db) !=SQLITE_OK){printf("%s\n",sqlite3_errmsg(db));exit(1);}else{printf("open slite3 success\n");}if(sqlite3_exec(db,"create table stu(id Integer,name char,score Integer);",NULL,NULL,&errmsg) !=SQLITE_OK){printf("%s\n",sqlite3_errmsg(db));exit(1);}else{printf("create or open table success\n");}while(1){printf("*********************\n");printf("1:insert,2:delete,3:quert,4:update,5:quit\n");printf("*********************\n");printf("please input cmd\n");scanf("%d",&cmd);getchar();switch(cmd){case 1:do_insert(db);break;case 2:do_delete(db);break;case 3:do_query2(db);break;case 4:do_update(db);break;case 5:sqlite3_close(db);exit(0);break;case 6:printf("err cmd\n");}}return 0;
}


 

相关文章:

  • Nginx Proxy Manager 中文版安装部署
  • 【电脑维修】MERCURY水星无线网卡导致 Windows 网络适配器无法连接的一种情况
  • 【Linux】VSCode用法
  • 数字智慧方案5961丨智慧能源与运维云平台解决方案(52页PPT)(文末有下载方式)
  • 贝叶斯算法实战:从原理到鸢尾花数据集分类
  • Vue 3 中通过 this. 调用 setup 暴露的函数
  • 【2025域适应科研日报】
  • 仿腾讯会议——服务器结构讲解
  • 前端面试常问问题[From CV]
  • 【2025最新】为什么用ElasticSearch?和传统数据库MySQL与什么区别?
  • 【阿里云大模型高级工程师ACP习题集】2.8 部署模型
  • 【免费】1992-2021年各省GDP数据/各省地区生产总值数据
  • Lucene多种数据类型使用说明
  • 【Hive入门】Hive性能调优之资源配置:深入解析执行引擎参数调优
  • 数据飞轮驱动AI系统持续进化
  • Spring MVC @PathVariable 注解怎么用?
  • Python-57:Base32编码和解码问题
  • Android JIT编译:adb shell cmd package compile选项
  • HarmonyOS应用开发中实现本地化存储的几种方式
  • 为什么大模型偏爱Markdown
  • 特朗普称加总理将很快访美,白宫:不影响将加拿大打造成“第51个州”计划
  • 北京亦庄启动青年人才创新创业生态示范区
  • 全文丨中华人民共和国民营经济促进法
  • 水利部将联合最高检开展黄河流域水生态保护专项行动
  • “五一”逃离城市计划:带上帐篷去大自然里充电
  • 李开复出任福耀科技大学理事会理事,助力学校AI战略