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