前言
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等。
--------摘自百度百科
本篇文章主要讲述如何在终端和C程序里中使用sqlite3
一:在终端上使用sqlite3
1:首先检测当前环境下有没有安装
在终端上输入 sqlite3
结果:
第一行是你的版本信息;光标在等待你输入命令
终端上的一些基础命令
1: .help 打开帮助菜单 可以查看sqlite3的所有命令和用法
2: .exit 退出sqlite3
3 : .table 显示当前所有表
4: .schema <table_name> 查看表的结构 //不加括号
5: .database 显示当前打开的数据库文件
系统命令一般以点开头;功能命令以分号结尾;
2:建立一张表
create table student( //student为表名
ID INTEGER, //相当与字符型
name TEXT, //整形
sex TEXT,
age INTEGER,
primary key(ID) //ID值不可重复
);
3:给表添加成员
insert into student values(1, 'Zhang', 'M', 18);
第二个语句提示ID为1的重复了;
4:查看成员
select ID, Name from student where NOT(Sex = 'f'); //查看成员中SEX的值不为f的成员ID和名字
当要查看成员所有参数的时候ID,Name可以用*号代替
select * from student where NOT(Sex = 'f');
where是个比较表达式,以下列举一些通用的表达式
NOT是逻辑操作符除了,NOT 以外还可以使用AND 、OR;
5:删除成员
delete from student where ID = 2;
删除student表里id为2的成员
6:删除表
drop tablestudent;
删除名字为student的表
二:在C程序上使用SQLITE3
1:先包含数据库头文件 sqlite3.h
2:定义一个数据库文件指针
sqlite3 *database
2:打开表函数
int sqlite3_open( 文件名,sqlite3 ** );
第一个参数为数据库名称,第二个是文件指针
如果数据库不存在,则新建一个
3:关闭数据库
intsqlite3_close(sqlite3 *);
第一个参数为文件指针
4:使用数据库的函数
int sqlite3_exec(sqlite3*, constchar *sql,sqlite3_callback, void *, char**errmsg );
第一个参数为文件指针;第二个参数为sql语句
第三个参数为回调函数;第四个参数为为回调
第5个参数char** errmsg是错误信息
5:例子
#include <stdio.h>
#include <sqlite3.h> // 数据库的头文件
// 每查到一条记录,该函数被调用一次
int msg(void* v, int num, char** value, char** name)
{
int i;
for (i = 0; i < num; i++)
{
printf ("%s : %-8s", name[i], value[i]);
}
printf ("\n");
return 0; // 函数内部一定要返回一个0
}
int main()
{
sqlite3 * database;
// 打开数据库
int ret = sqlite3_open("student.db", &database);
if (ret != SQLITE_OK)
{
printf ("打开数据库失败\n");
return -1;
}
printf ("打开数据库成功\n");
char *errmsg = NULL;
char *sql = "create table if not exists student(ID INTEGER,name TEXT,sex TEXT,age INTEGER,primary key(ID))";
ret = sqlite3_exec(database, sql, NULL, NULL, &errmsg);
if (ret != SQLITE_OK)
{
printf ("数据库操作失败:%s\n", errmsg);
return -1;
}
int id;
char name[20];
char sex[2];
int age;
printf ("请输入ID:\n");
scanf ("%d", &id);
printf ("请输入用户名:\n");
scanf ("%s", name);
printf ("请输入性别:\n");
scanf ("%s", sex);
printf ("请输入年龄:\n");
scanf ("%d", &age);
// insert into student values(id, name, sex, age);
char buf[100];
sprintf (buf, "insert into student values(%d, '%s', '%s', %d)", id, name, sex, age);
ret = sqlite3_exec(database, buf, NULL, NULL, &errmsg);
if (ret != SQLITE_OK)
{
printf ("数据库操作失败:%s\n", errmsg);
return -1;
}
char *sql1 = "select * from student";
ret = sqlite3_exec(database, sql1, msg, NULL, &errmsg);
if (ret != SQLITE_OK)
{
printf ("数据库操作失败:%s\n", errmsg);
return -1;
}
// 关闭数据库
sqlite3_close(database);
return 0;
}
TIP:如果用GCC编译的话,要加-lsqlite3