SQLite数据库

一、数据库基础知识

1.功能:存放数据,对数据进行操作;
2.常用数据库:大型数据库:Oracle(甲骨文)、DB2;中型数据库:SQLServer;小型数据库:MYSQL、SQLite(关系型数据库);

二、sqlite数据库

1.创建一个数据库(类似于office中excel文件簿)

sqlite3 student.db
//存在直接打开,不存在创建表之后创建数据库文件

2.常见命令

.help //显示帮助信息
.quit //退出sqlite3
.database //显示当前打开的数据库文件
.tables //显示数据库中所有表名
.schema //查看表的结构

3.创建数据库表(类似于excel 一个文件簿中的一张文件表)
//字段类型

NULL //空
integer  //值带符号整型
real    //浮点值,存储8个字节的
text  //字符串,使用数据库编码
blob  //二进制数据

//创建模板

create table <table_name>(
					字段名1  字段类型,
					字段名2  字段类型,
					......);			
//示例
create table student(ID inteager,NAME text,SCORE inteager);	

4.插入记录

insert into student values(0,"zzzz",90);

5.查阅表内所有内容

select *from student;

//调整显示的效果,再使用select命令

.headers on//显示列的名字
.mode column//按照列显示
select *from student;

6.过滤记录筛选

select * from student where ID =0;
select name from student where name ="zhangsan";

7.修改字段

update student set score =100 where name ="zhangsan";//把张三的score 字段修改为100
//修改的是所有叫zhangsan的;

8.删除记录

delete from student where id =0;//

9.把字段设置成不重复的(primary key)

//在创建表时
create table teacher(id inteager primary key,NAME TEXT,SCORE INTEAGER);//这时,id 不能重复;

10.表不存在则创建

create table if not exists teacher(id inteager,NAME TEXT,SCORE INTEAGER);//

11.C语言操作数据库
(1)打开数据库文件

sqlite3 *db;
int sqlite3_open(const char *filename,sqlite3 **ppDb);
//返回值:成功返回0,失败返回错误码
//参数filename :数据库名字
//ppDb  :数据库指针

(2)关闭数据库

sqlite3_close(db);//db为sqlite3 *db;

(3)执行sql语句

int sqlite3_exec(sqlite3 **db,//数据库地址
				const char *sql,//数据库语句
				int (*callback)(void *,int ,char **,char **),//回调函数
				void *arg,//给回调函数传递的第一个参数
				char **errmsg,//获取错误信息存放的地址
				);
//返回值:成功返回0,失败返回错误码。

(4)替换执行内容

fprintf();

//示例

#include <stdio.h>
#include <sqlite3.h>

struct student
{
	int id;
	char name[64];
	int score;
};

int main(int argc, const char *argv[])
{
	int ret;
	sqlite3 *db;
	char buf[128]={0};
	char *errmsg;
	struct student stu={108,"李小花",199};
	sprintf(buf,"insert into student values(%d,'%s',%d)",stu.id,stu.name,stu.score);

	char *sql="create table if not exists student(ID INTEGER,NMAE TEXT,SCORE INTEGER)";//创建表
	char *sql_insert="insert into student values(0,'zhangsan',99)";//插入数据
	ret=sqlite3_open("student.db",&db);//打开表
	if(ret!=0)//SQLITE_OK==0
	{
		fprintf(stderr,"Fail to sqlite3_open %s\n",sqlite3_errmsg(db));//打印数据库失败错误信息
		return -1;
	}

	ret = sqlite3_exec(db,sql,NULL,NULL,&errmsg);
	if(ret!=SQLITE_OK)
	{
		fprintf(stderr,"sqlite3_exec1 %s\n",errmsg);
		sqlite3_free(errmsg);//释放错误字符串指向堆区的内存

		return -1;
	}

	ret = sqlite3_exec(db,buf,NULL,NULL,&errmsg);
	if(ret!=SQLITE_OK)
	{
		fprintf(stderr,"sqlite3_exec2 %s\n",errmsg);
		sqlite3_free(errmsg);
		return -1;
	}

	sqlite3_close(db);//关闭数据库
	return 0;
}

12.删除表

drop table <表名>;

13.查看记录

int sqlite3_get_table(
		sqlite3 *db,//数据库指针
		const char *zSql,//sql 语句
		char ***pazResult,//获得查询结果存放的指针数组首地址
		int *pnRow,//获得多少行
		int *pnColumn,//获得多少列
		char **pzErrmsg//获得错误信息
		);

//示例

#include <stdio.h>
#include <sqlite3.h>

struct student
{
	int id;
	char name[64];
	int score;
};

int main(int argc, const char *argv[])
{
	int ret;
	sqlite3 *db;
	char buf[128]={0};
	char *errmsg;
	struct student stu={108,"李小花",199};
	sprintf(buf,"insert into student values(%d,'%s',%d)",stu.id,stu.name,stu.score);
	
	int i,j;
	int row,colum;
	int index=0;
	char **result;
	char * zsql="select * from student";//查找表student中所有元素

	char *sql="create table if not exists student(ID INTEGER,NMAE TEXT,SCORE INTEGER)";//创建表
	char *sql_insert="insert into student values(0,'zhangsan',99)";//插入数据
	ret=sqlite3_open("student.db",&db);//打开表
	if(ret!=0)//SQLITE_OK==0
	{
		fprintf(stderr,"Fail to sqlite3_open %s\n",sqlite3_errmsg(db));//打印数据库失败错误信息
		return -1;
	}

	ret = sqlite3_exec(db,sql,NULL,NULL,&errmsg);
	if(ret!=SQLITE_OK)
	{
		fprintf(stderr,"sqlite3_exec1 %s\n",errmsg);
		sqlite3_free(errmsg);//释放错误字符串指向堆区的内存

		return -1;
	}

	ret = sqlite3_exec(db,buf,NULL,NULL,&errmsg);
	if(ret!=SQLITE_OK)
	{
		fprintf(stderr,"sqlite3_exec2 %s\n",errmsg);
		sqlite3_free(errmsg);
		return -1;
	}

	ret=sqlite3_get_table(db,zsql,&result,&row,&colum,&errmsg);
	if(ret!=0)
	{
		fprintf(stderr,"sqlite3_exec1 %s\n",errmsg);
		sqlite3_free(errmsg);//释放错误字符串指向堆区的内存
		return -1;
	}
/*  遍历
	for(i=0;i<row;i++)
	{
		for(j=0;j<colum;j++)
		{
			printf("%s    ",result[index]);
			index++;
		}
		putchar('\n');
	}
	*/
//查找打印
for(i=0;i<row;i++)
	{
		for(j=0;j<colum;j++)
		{
		if(strcmp(result[index],"李小花")==0)
		{
			printf("%s    ",result[index+1]);
			i=row +1;
			break;
		}
		index++;
		}
		putchar('\n');
	}

	sqlite3_free_table(result);//使用完需要释放
	sqlite3_close(db);//关闭数据库
	return 0;
}
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jun8086

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值