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

day31 SQLITE

数据库相关函数

数据库创建

int sqlite3_open( const char *filename,  sqlite3 **ppDb);

功能:打开数据库,不存在则创建

参数:const char *filename        数据库名

           sqlite3 **ppDb                 二级指针,传出ppDb数据库的一级指针

返回值:成功返回SQLITE_OK 失败返回错误码 sqlite_errmsg()来获取错误信息

关闭数据库和错误信息

int sqlite3_close(sqlite3* ppDb) & const char * sqlite3_errmsg(sqlite3* ppDb)

int sqlite3_errcode(sqlite3 *db)

功能:关闭数据库                   参数返回值参上

功能:返回错误信息               返回值为错误信息字符串

功能:返回错误码                   返回错误码

操作数据表

int sqlite3_exec(sqlite3 *ppDb,const char *sql

,int (*callback)(void*,int,char**,char**),void*,char**errmsg)

功能:实现sql指令

参数:

sqlite3 *ppDb数据库
 const char *sql sql指令
int (*callback)(void*,int,char**,char**) 结果输出函数
void*传入输出函数的参数
char**errmsg错误信息

int (*callback)(void*,int,char**,char**) 

void *arg外部传入参数
int cols列数
char** msg_text数据文本
char** msg_header表头

要输出结果用结果输出函数,无需填NULL

返回值:参上

代码实现增删改查

#include <stdio.h>
#include <25061head.h>
int table_add(sqlite3 *pdb)
{int num;char name[18];char sex[10];double score;printf("请输入学号 姓名 性别 成绩\n");scanf(" %d %s %s %lf",&num,name,sex,&score);//添加信息char sql[128]="";sprintf(sql,"insert into stuinfo values(%d,\"%s\",\"%s\",%.2lf);",\num,name,sex,score);char *errmsg=NULL;if(sqlite3_exec(pdb,sql,NULL,NULL,&errmsg)!=SQLITE_OK){printf("添加信息失败 %s \n",errmsg);sqlite3_free(errmsg);return -1;		}printf("添加信息成功\n");return 0;}
int table_delete(sqlite3 *pdb)
{int delete_num;printf("请输入删除信息的学号\n");scanf("%d",&delete_num);getchar();	char sql[128]="";sprintf(sql,"delete from stuinfo where num=%d",delete_num);char *errmsg=NULL;if(sqlite3_exec(pdb,sql,NULL,NULL,&errmsg)!=SQLITE_OK){printf("删除信息失败 %s \n",errmsg);sqlite3_free(errmsg);return -1;		}printf("信息删除成功\n");return 0;
}
int table_updata(sqlite3 *pdb)
{int updata_num;char updata_msg[32]="";printf("请输入要更新信息的学号\n");scanf("%d",&updata_num);getchar();printf("请输入要更新的信息 eg: score=90 name='ttt'\n");scanf("%s",updata_msg);//updata_msg[strlen(updata_msg)+1]=' ';getchar();char sql[128]="";//printf("num=%d\n",updata_num);sprintf(sql,"update stuinfo set %s where num=%d",updata_msg,updata_num);//printf("%s\n",sql);char *errmsg=NULL;if(sqlite3_exec(pdb,sql,NULL,NULL,&errmsg)!=SQLITE_OK){printf("更新信息失败 %s \n",errmsg);sqlite3_free(errmsg);return -1;		}printf("更新信息成功\n");return 0;
}
int callback(void *arg,int cols,char** msg_text,char** msg_header)
{if(*(int *)arg==0){*(int *)arg=1;for(int i=0;i<cols;i++){printf("%s\t",*(msg_header+i));}putchar(10);}for(int j=0;j<cols;j++){	printf("%s\t",*(msg_text+j));}putchar(10);return 0;
}
int table_select(sqlite3 *pdb)
{char sql[128]="";sprintf(sql,"select * from stuinfo");char *errmsg=NULL;int arg=0;if(sqlite3_exec(pdb,sql,callback,&arg,&errmsg)!=SQLITE_OK){printf("展示信息失败\n");sqlite3_free(errmsg);return -1;}
}
int main(int argc, const char *argv[])
{	//创建数据库sqlite3 *pdb=NULL;int ret=sqlite3_open("./my.db",&pdb);if(ret!=0){printf("sqlite3_open error errcode=%d errmsg=%s\n",\sqlite3_errcode(pdb),sqlite3_errmsg(pdb));return -1;}//创建数据表char *sql="create table if not exists stuinfo \(num int,name text,sex char,score double);"; char *errmsg=NULL;if(sqlite3_exec(pdb,sql,NULL,NULL,&errmsg)!=SQLITE_OK){printf("创建数据表失败 %s \n",errmsg);sqlite3_free(errmsg);return -1;		}printf("数据表创建成功\n");int i;while(1){   printf("1.添加信息\n");printf("2.删除信息\n");printf("3.修改信息\n");printf("4.展示信息\n");printf("输入\n");scanf("%d",&i);getchar();switch(i){case 1: table_add(pdb);break;case 2: table_delete(pdb);break;case 3: table_updata(pdb);break;case 4: table_select(pdb);break;case 0:exit(0);default: printf("输入错误 重新输入\n");}}return 0;
}

今日刷题

http://www.dtcms.com/a/340237.html

相关文章:

  • 百度Q2财报:总营收327亿 AI新业务收入首次超100亿
  • 前端-JavaScript笔记(核心语法)
  • Go语言数据类型全解析
  • 线程安全的产生以及解决方案
  • 记一次pnpm start启动异常
  • 学习设计模式《二十三》——桥接模式
  • 算法实战入门第二篇:链表结构与五大经典应用
  • 如何制作免费的比特币冷钱包
  • C++中的 Eigen库使用
  • 机器学习算法核心总结
  • AI全栈工程师:重塑软件开发全生命周期的未来革命
  • Nginx目录结构与配置文件全解析
  • 3-1〔OSCP ◈ 研记〕❘ WEB应用攻击▸理论概述 OWASP
  • 【LeetCode 热题 100】279. 完全平方数——(解法三)空间优化
  • Windows 中的“计数器”
  • ASP.NET 使用redis 存储session 负载机器共享会话状态
  • 【39页PPT】大模型DeepSeek在运维场景中的应用(附下载方式)
  • RabbitMQ:消息转化器
  • 高通 XR 系列芯介绍
  • 【论文阅读】SIMBA: single-cell embedding along with features(2)
  • ansible playbook 实战案例roles | 实现基于firewalld添加端口
  • ansible playbook 实战案例roles | 实现基于 IHS 的 AWStats 访问监控系统
  • Milvus 可观测性最佳实践
  • 分布式唯一 ID 生成方案
  • 基于 Uniapp 的医疗挂号系统开发经验分享
  • 苹果XR芯片介绍
  • 关于uniappx注意点1 - 鸿蒙app
  • XR(AR/VR/MR)芯片方案,Soc VS “MCU+协处理器”?
  • 橙武低代码 + AI:制造业场景中的设计思考
  • AI-调查研究-56-机器人 技术迭代:从液压驱动到AI协作的进化之路