文章目录
1.什么是sqlite3数据库
SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库一样,您不需要在系统中配置。就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件。此外,安装sqlite3也极为简单,其大小只有250KB左右;
2.linux安装sqlite3数据库
2.1本地安装
需要在官网下载文件后安装;
sudo dpkg -i *.deb
2.2在线安装(建议)
sudo apt-get install sqlite3
安装完成后,命令行输入 sqlite3,如果是下面内容,则表示安装成功:
3.sqlite3基本语句
sqlite3 的命令分为两种,一种是系统命令,另一种是sql语句;
命令必须以 . 打头,sql语句必须以 ; 结尾.
3.1系统命令
在linux命令行模式输入 sqlite3 [数据库名称] 即可创建或打开一个数据库;
(1) .help
用来查看帮助信息;
(2) .quit 与 .exit
退出 sqlite3 编辑模式;
(3) .shema
查看已创建表的表头
(4) .table
查看已创建表的表名;
(5) .database
查看数据库相关信息,例如保存路径,大小等;
3.2 sql的几个基本语句
- 创建一个新表stu
create table stu ( id Integer , name char , score float );
这样,我们就创建了一张名为 stu 的新表,表头有三个数据,分别是整型的学号,字符串类型的姓名以及浮点型的分数;
- 向表中插入数据
insert into stu values( 1001 , ’ wuwukai ’ , 88.7 );
系统会根据顺序依次插入对应的位置;
- 插入部分数据
insert into stu ( id , name)values( 1002,‘PDD’); //这里栏数据只有id和姓名而没有分数
- 查看表中所有数据
select * from stu;
- 按条件查找表中的数据
select * from stu where name = ‘wuwukai’; //查询姓名为‘wuwukai’的学生信息;
select * from stu where name = ‘wuwukai’ and score = 88.7; //查询同时满足条件的学生信息;
select * from stu where name = ‘wuwukai’ or score = 88.7; //查询满足任意条件的学生信息;
- 删除一条记录
delete from stu where name = ‘wuwukai’; //删除表中name为wuwukai的这一条记录;
- 更新一条记录
update stu set name = ‘wuwukai’ where id = 1001;
update stu set name = ‘wuwukai’ , score = 88 where id = 1001;
- 添加一列(加一个表头信息)
alter table stu add column address char;
- 删除一列
sqlite3 不支持直接删除一列,我们可以使用三步来完成,假设删除分数这一列;
1.create table stu1 as select id , name from stu; //创建一张新表,这个表保存了stu表的id和名字
2.drop table stu; //删除原表;
3.alter table stu1 rename to stu; //将新表名改为旧表名;
4.sqlite3数据库的API操作
1. sqlite3_open()
int sqlite3_open(const char *filename, sqlite3 **ppDb);
函数功能:创建新的或打开已创建的数据库;
参数:filename是该数据库的名称,同时可以指定保存路径,默认为当前路径( . / );第二个参数是用来操作这个数据库的一个句柄,是一个二级指针;
返回值:成功返回 SQLITE_OK,失败返回错误码;
2.sqlite3_errmsg();
const char *sqlite3_errmsg(sqlite3*ppDb);
功能:获取当前的错误信息;
3. sqlite3_exec()
int sqlite3_exec(
sqlite3* ppDb, /* 操作数据库所用的句柄 */
const char *sql, /* sqlite3 语句 */
int (*callback)(void*,int,char**,char**), /* 回调函数 */
void *, /* 传递给回调函数的参数 */
char **errmsg /* 错误信息保存处 */
);
功能:该函数连接了sqlite3 与 c程序,它使用第一个参数指定的数据库,利用第二个参数的sqlite3 语句执行,如果出错,出错信息将会保存在最后一个参数中,回调函数只在sqlite3语句为查询时生效;
回调函数
int callback(
void* para, //sqlite3_exec()语句所传参数;
int argc, //表中记录的条数;
char** argv, //这是一个保存了每一条记录的各个信息的指针的数组;
char** head_name //这是一个保存了表头信息的指针的数组
);
当我们使用sqlite3_exec()函数并且所使用的是查询语句后,查询的结果将会传给回调函数,我们通过操作回调函数的参数,就可以得到我们想要的数据;
5.代码
#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
#define PTAH_and_NAME "./student.db"
int do_insert(sqlite3 *db)
{
char sql[128] = {0};
int id;
char name[32] = {0};
int score;
char *errmsg;
printf("Input id:");
scanf("%d",&id);
getchar();
printf("Input name:");
scanf("%s",name);
getchar();
printf("Input score:");
scanf("%d",&score);
getchar();
sprintf(sql,"insert into stu values(%d,'%s',%d);",id,name,score);
if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) != SQLITE_OK)
{
printf("%s\n",errmsg);
}
else
{
printf("Insert ok.\n");
}
return 0;
}
int do_delete(sqlite3 *db)
{
int id;
char sql[128] = {0};
char *errmsg;
printf("Input the id you will delete:\n");
scanf("%d",&id);
getchar();
sprintf(sql,"delete from stu where id = %d;",id);
if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) != SQLITE_OK)
{
printf("%s\n",errmsg);
}
return 0;
}
int callback(void *data,int argc,char **argv,char **headname)
{
int i;
for(i = 0;i < argc;i++)
{
printf("%s = %s\n",headname[i],argv[i]);
}
printf("\n");
return 0;
}
int do_query(sqlite3 *db)
{
char *errmsg;
char sql[128] = "select * from stu;";
if(sqlite3_exec(db,sql,callback,NULL,&errmsg) != SQLITE_OK)
{
printf("%s\n",errmsg);
}
return 0;
}
int do_update(sqlite3 *db)
{
char *errmsg;
char sql[128] = {};
printf("Input the sqlite3 command you want exec:\n");
fgets(sql,sizeof(sql),stdin);
if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) != SQLITE_OK)
{
printf("%s\n",errmsg);
}
return 0;
}
int main(int argc, char *argv[])
{
int ch;
sqlite3 *db;
char *errmsg;
if(sqlite3_open(PTAH_and_NAME,&db) != SQLITE_OK)
{
printf("sqlite3_open failure:%s\n",sqlite3_errmsg(db));
return -1;
}
else
{
printf("Open or create student.db ok\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 success.\n");
}
while(1)
{
printf("**************************************************\n");
printf(" 1:insert 2:delete 3:query 4:update 5:quit.\n");
printf("**************************************************\n");
printf("Input option:\n");
scanf("%d",&ch);
getchar();
switch(ch)
{
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("Error input\n");
}
}
return 0;
}