一、基本概念
1、数据
2、数据库
- 数据库是在数据库管理系统管理和控制之下,存放在存储介质上的数据集合
3、数据库管理系统-----DBMS
- DBMS是数据库系统中对数据进行统一管理和控制的软件系统
- 1、数据库定义功能
- 2、数据库操纵功能
- 3、数据库运行控制功能
- 4、数据通信功能
- 5、支持存取海量数据
二、数据库下载
- sudo apt-get install sqlite3
sudo apt-get install libsqlite3-dev
三、数据库的使用
1、数据库文件一般以 .db 为后缀
- sqlite3 test.db ----如果test.db存在则打开,不存在则创建
.table ------查看数据库文件中有那几张表
.schema ------查看数据库文件中所有表的详细信息. sqlite>.schema
.quit --------退出数据库
2、sqlite语句,每个命令以;结束
创建新表
-
sqlite>create table (f1 typel,f2 type2,…);
create tab1e <table name> (name1 type , name2 type. . . . . .);
type:字段类型
integer ->int
text/char ->字符串类型
rear->浮点型
示例:
create table usrInfo(usrname text, passwd char);
删除表
- sqlite>drop table <tablename>;
插入记录
-
insert into <tablename> values(data1, data2.. . .);
text/char 都是指的字符串类型""和"'括起来的都表示字符串
查看记录
-
sqlite>select * from <table_name>;
更新数据
-
sqlite>update <table_name> set <f1=value1>, <f2=value2> ... where <expression>;
按指定条件删除数据
-
sqlite>delect from <table_name> where <expression>;
按指定条件查询表中记录
-
sqlite >select * from <table_name> where <expression>;
四、下载数据库可视化工具
-
sudo apt-get install sqlitebrowser
可视化工具的使用:
终端输入:sqlitebrowser <table_name>
示例:sqlitebrowser student.db
五、使用sqlite3提供函数库操作数据库文件
-
SQlite编程接口
-
1、打开数据库
- int sqlite3_open(char *path, sqlite3 **db);
功能:打开sqlite数据库
参数:
path:数据库文件路径+文件名
db:指向sqlite句柄的指针
返回值:成功返回0, 失败返回错误码(非零值)
sqlist3 *db = NULL;
sqlite3_open(“students.db”, &db);
-
2、关闭数据库
- int sqlite3_close(sqlite3*db);
功能:关闭sqlite数据库
返回值:成功返回0,失败返回错误码
-
3、打印错误信息
- const char *sqlite3_errmg(sqlist3*db);
返回值:返回错误信息
-
执行sqlite语句
- 1、typedef int (*sqlite3_callback)(void *arg, int,char **, char **);
- 2、 int sqlite3_exec(sqlite3 *db, const char *sql, sqlite3_callback callback, void *arg, char **errmsg);
功能:执行SQL操作
db:数据库句柄
sql:SQL语句
callback:回调函数
arg:传递给回调函数的参数
errmsg:错误信息指针的地址
返回值:成功返回0,失败返回错误码 - 注意:当需要sqlite3_exec去执行select操作时需要封装callback去处理查询到的记录
- 3、typedef int (*sqlite3_callback)(void *para, int f_num, char **f_value, char **f_name);
- 功能:每找到一条记录自动执行一次回调函数
para:传递给回调函数的参数
f_num:记录中包含的字段数目
f_value:包含每个字段值的指针数组
f_name:包含每个字段名称的指针数组
返回值:成功返回0,失败返回-1
六、示例代码
1、代码
#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
#include <string.h>
int callback(void*para, int f_num, char**f_value, char**f_name);
int main(int argc, char *argv[])
{
//打开数据库students.db
sqlite3 *db = NULL;//接收数据库地址
if(0 != sqlite3_open("students.db", &db))
{
printf("error:%s\n", sqlite3_errmsg(db));
return -1;
}
//创建表
if(0 != sqlite3_exec(db, "create table students (姓名 text, 年龄 text, 成绩 text);", NULL, NULL, NULL))
{
printf("%s\n",sqlite3_errmsg(db));
return -1; //失败退出
}
else //创建表成功继续执行操作
{
while(1)
{
printf("what will you do?\n");
printf("1(insert), 2(select)\n"); //1插入操作,2查找操作
char a[10] = {0};
scanf("%s", a);
char buf[10] = {0}; //存放姓名
char buf1[4] = {0}; //存放年龄
char buf2[4] = {0}; //存放成绩
char buf3[256] = {0}; //存放操作内容
if(0 == strcmp(a, "1"))//插入操作
{
while(1)
{
printf("请选择后续操作:1:输入, 2:退出\n");
char b[10] = {0};
scanf("%s", b);
if(0 == strcmp(b,"1")) //输入内容
{
printf("请输入学生姓名:");
scanf("%s", buf);
printf("请输入学生年龄:");
scanf("%s", buf1);
printf("请输入学生成绩:");
scanf("%s", buf2);
sprintf(buf3, "insert into students values('%s', '%s', '%s');", buf, buf1, buf2); //将命令写入buf3
memset(buf, 0, sizeof(buf));
memset(buf1, 0, sizeof(buf1));
memset(buf2, 0, sizeof(buf2));
if(0 != sqlite3_exec(db, buf3, NULL, NULL, NULL)) //执行插入操作
{
perror("insert error!\n"); //失败
}
else
printf("insert success\n");//成功
}
else if(0 == strcmp(b, "2")) //退出插入模式
break;
}
}
else if(0 == strcmp(a, "2")) //查找模式
{
if(0 != sqlite3_exec(db, "select* from students;", callback, NULL, NULL))
{
perror("select error!\n");
break;
}
else
{
printf("select success\n");
break;
}
}
else
{
printf("请重新输入:\n");
}
}
}
return 0;
}
int callback(void*para, int f_num, char**f_value, char**f_name)
{
int i = 0;
int j = 0;
printf("********************\n");
printf("姓名 年龄 成绩\n");
for(int i = 0;i < f_num;i++)
{
printf("%s ",f_value[i]);
}
printf("\n");
return 0;
}
2、执行效果