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;
}

今日刷题

相关推荐
睡觉的时候不会困5 小时前
Redis 主从复制详解:原理、配置与主从切换实战
数据库·redis·bootstrap
程序员的世界你不懂7 小时前
【Flask】测试平台开发,新增说明书编写和展示功能 第二十三篇
java·前端·数据库
自学也学好编程7 小时前
【数据库】Redis详解:内存数据库与缓存之王
数据库·redis
JAVA不会写7 小时前
在Mybatis plus中如何使用自定义Sql
数据库·sql
IT 小阿姨(数据库)7 小时前
PgSQL监控死元组和自动清理状态的SQL语句执行报错ERROR: division by zero原因分析和解决方法
linux·运维·数据库·sql·postgresql·centos
ChinaRainbowSea8 小时前
7. LangChain4j + 记忆缓存详细说明
java·数据库·redis·后端·缓存·langchain·ai编程
小马学嵌入式~9 小时前
嵌入式 SQLite 数据库开发笔记
linux·c语言·数据库·笔记·sql·学习·sqlite
Java小白程序员9 小时前
MyBatis基础到高级实践:全方位指南(中)
数据库·mybatis
Monly219 小时前
人大金仓:merge sql error, dbType null, druid-1.2.20
数据库·sql
不宕机的小马达10 小时前
【Mysql|第一篇】Mysql的安装与卸载、Navicat工具的使用
数据库·mysql