SQLite基本&C/C++(建表、增、删、修、查)【重点:sqlite存储变量;即values是变量】

1、基础

sqlite是最简单的数据库,也是轻量型数据库,不需要专门的数据库软件,只需要简单的插件就可以了,所以我在需要数据库时选择了sqlite数据库。虽然不需要特定的软件,但是如果希望直观的查看数据库,可以下载一个:SQLite Expert Professional 5 - 64bit软件,可以直观查看自己建立的数据库以及表格。
但是,sqlite有一个缺点就是它不进行类型的检查。比如:你建表的时候要求id的类型是Integer,但是赋值values时,却给了’zhangsan’字符型,sqlite并不会报错,认为id就是’zhangsan’
我是在VS中使用sqlite数据库,安装过程见:
https://blog.csdn.net/weixin_43384257/article/details/89397529
SQLite Expert Professional 5 - 64bit的下载安装很容易,一直下一步就可以了,不需要配置什么。

2、sqlite基本命令

创建一张数据库表stu

create table stu(id Integer,name char ,score Integer);

插入一条记录

insert into stu values(1001,'zhangsan',80);//三列都插入数值
insert into stu (name,score)values('lihua',70);//只传部分值,部分字段插入操作

查询记录

select * from stu;//查询所有字段结果
select name,score from stu;//查询数据库中的部分字段的内容
select * from stu where score = 80;
select * from stu where score = 80 and name = 'zhangsan';
select * from stu where score = 80 or name = 'zhangsan';

删除一条记录

delete from stu where score = '90';

更新一条记录

update stu set name = 'wangwu' where id = 1001;
update stu set name = 'wangwu' ,score = 88 where id = 1001;

3、sqlite3函数接口

sqlite3官网C++函数接口:https://www.sqlite.org/cintro.html
open打开数据库

int sqlite3_open(
  const char *filename,   /* Database filename (UTF-8) */
  sqlite3 **ppDb          /* OUT: SQLite db handle */
);

功能:打开数据库
参数:filename 数据库路径名
ppDb 代表的是数据库操作句柄(指针)
返回值:成功SQLITE_OK,出错错误代码

注意
看说明书的参数时,要求变量定义一级指针,你就定义变量值;要求变量定义二级指针,你就定义一级指针取地址
例如:sqlite3_open这个函数说明书中,第一个参数要求一级指针,第二个参数要求二级指针。那么在实例化时:

#define DATABASE "stu.db"//第一个参数要求一级指针,你就定义变量
sqlite3 *db;//第二个参数要求二级指针,你就定义一级指针,使用时取地址&db
sqlite3_open(DATABASE, &db) 

close关闭数据库

int sqlite3_close(sqlite3* db);

功能:关闭数据库
参数:db 操作数据库的指针
返回值:成功SQLITE_OK,出错错误代码

errmsg

const char *sqlite3_errmsg(sqlite3* db);

功能:通过db句柄,得到数据库操作错误信息
返回值:错误信息首地址

sqlite3_exec执行一条sql语句

int sqlite3_exec(
  sqlite3*,                                  /* An open database */
  const char *sql,                           /* SQL to be evaluated */
  int (*callback)(void*,int,char**,char**),  /* Callback function */
  void *,                                    /* 1st argument to callback */
  char **errmsg                              /* Error msg written here */
);

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

4、实例

#include <stdio.h>
#include "sqlite3.h"
#include <stdlib.h>
using namespace std;
#define DATABASE "stu.db"

int do_insert(sqlite3 *db)
{
	int id;
	char name[32] = {};
	int score;
	char *errmsg;
	
	char sql[128];

	printf("Input id: ");
	scanf_s("%d",&id,6);
	getchar();

	printf("Input name: ");
	scanf_s("%s", &name,32);
	getchar();

	printf("Input score: ");
	scanf_s("%d", &score,10);
	getchar();

	sprintf_s(sql,"insert into stu values(%d,'%s',%d);",id,name,score,256);
	
	if (sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
	{
		printf("%s\n",errmsg);
	}
	else
	{
		printf("Insert done!");
	}
	return 0;
}


int do_delete(sqlite3 *db)
{
	int id;
	char *errmsg;

	char sql[128];

	printf("Input id: ");
	scanf_s("%d", &id, 6);
	getchar();

	sprintf_s(sql, "delete from stu where id=%d", id, 256);

	if (sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
	{
		printf("%s\n", errmsg);
	}
	else
	{
		printf("Delete done!");
	}
	return 0;
}

int do_update(sqlite3 *db)
{
	int id;
	char *errmsg;
	int score;
	char sql[128];

	printf("Input update id: ");
	scanf_s("%d", &id, 6);
	getchar();

	printf("Input update score: ");
	scanf_s("%d", &score, 10);
	getchar();

	sprintf_s(sql, "update stu set score = %d where id =%d",score, id, 256);

	if (sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
	{
		printf("%s\n", errmsg);
	}
	else
	{
		printf("Update done!");
	}
	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_query(sqlite3 *db)
{
	char sql[128] = {};
	char * errmsg;

	sprintf_s(sql, "select * from stu;",256);

	if (sqlite3_exec(db, sql, callback, NULL, &errmsg) != SQLITE_OK)
	{
		printf("%s\n", errmsg);
	}
	else
	{
		printf("Query done!");
	}
	return 0;

}

int main(int argc, char* argv[])
{
	sqlite3 *db;
	char *errmsg;
	int cmd;

	if (sqlite3_open(DATABASE, &db) != SQLITE_OK)
	{
	printf(	"%s\n",sqlite3_errmsg(db));
	return -1;
	}
	else
	{
		printf("open database sucess.\n");
	}

	//创建一张数据库的表格
	if (sqlite3_exec(db, "create table stu(id Integer,name char ,score Integer)",NULL,NULL,&errmsg) != SQLITE_OK)
	{
		printf("%s\n",errmsg);
	}
	else
	{
		printf("create table or open sucess.\n");
	}

	while (1)
	{
		printf("Input cmd;");
		printf("**********************\n");
		printf("1:insert  2:delete  3:query  4:updata  5:quit");
		printf("**********************\n");

		scanf_s("%d",&cmd,2);
		getchar();
		switch (cmd)
		{
		case 1:
			do_insert(db);
			break;
		case 2:
			do_delete(db);
			break;
		case 3:
			do_query(db);
			break;
		case 4:
			do_update(db);
			break;
		case 5:
			sqlite3_close(db);
			exit(0);

		default:
			printf("Erro cmd\n");
			break;
		}

	}
	return 0;
}

结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

PS:使用拼接函数sprintf可以完成 sqlite存储变量

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值