SQLite简介
轻量化,易用的嵌入式数据库,用于设备端的数据管理,可以理解成单点的数据库。传统服务器型数据 库用于管理多端设备,更加复杂
SQLite是一个无服务器的数据库,是自包含的。这也称为嵌入式数据库,这意味着数据库引擎作 为应用程序的一部分运行。
MySQL需要运行服务器,MySQL将需要客户端和服务器架构通过网络进行交互。
基于嵌入式的数据库主要有:SQLite,Firebird,Berkeley DB,eXtremeDB
Firebird 是关系型数据库,功能强大,支持存储过程,SQL兼容等
SQLite 关系型数据库,体积小,支持ACID事务 Berkeley DB
eXtremeDB 是内存数据库,运行效率高
SQLite数据库安装
下载地址
安装方式一:
sudo apt-get -y install sqlite
安装方式二:
1. 把下载的文件sqlite-autoconf-3390000.tar.gz上传到开发板 2. tar xvf sqlite-autoconf-3390000.tar.gz 解压 3. cd sqlite-autoconf-3390000 进入文件夹 4. ./configure --prefix=/usr/local 配置安装路径在/usr/local 5. make 编译//比较久10分钟 6. sudo make install 安装
SQLite的命令用法
创建一个数据库
方法一
1、sqlite3 //进入数据库
2、.open test.db //当数据库没有时创建数据库
3、.quit //退出数据库命令行
方法二
1、sqlite3 mydatabase.db //进入数据库命令行时顺带创建或打开
2、.databases //列出当前打开的数据库
3、.quit //退出
tip:
当sqlite3输入一条错误命令后怎么退出来,.exit和.quit都不起作用
在新的一行输入分号
;(回车)
然后sqlite会提示一段错误信息 然后就好了
创建一张数据表
create table stu(id Integer,name char,score integer);
创建了一张叫做stu的数据表,里面包含了id,名字和成绩等信息
插入数据
nsert into stu values(001,"zahng",11);
insert into stu values(002,'aaaaa',222); //‘’和“”都可以
insert into stu(id,score) values(004,99); //只添加Id和分数
查找数据表内的数据
select *from stu; //查询表内所有内容
select name,id from stu; //查询表内名字、id
.tables //可以查看打开的数据库里的表格
出现异常
CTRL+Z退出
删除一条数据
delete from stu where id=1; //删除id=1的数据
删除一张表
drop table stu2; //删除表stu2
更新表中数据
update stu set name='a' where id=4; //更新id=4的数据的name更改为a
update stu set sex='f' where id<10; //更新stu表中id<10的sex属性为f
数据表增加一列属性
alter table stu add column sex char; //数据表增加一列sex的属性
SQLite的编程实战
打开/创建数据库API
#include <sqlite3.h>
int sqlite3_open(const char *filename,sqlite3 **ppDb);
函数作用:打开/创建数据库
filename:路径(包含文件名)
ppDb:sqlite3类型的二级指针,成功调用sqlite3_open()函数,ppDb将会指向数据库的地址
返回值:成功返回0(SQLITE_OK),失败返回错误编码
int sqlite3_close(sqlite3 *pDb);
函数作用:关闭数据库
pDb:sqlite3类型的指针,pDb将会指向数据库
返回值:成功返回0(SQLITE_OK),失败返回错误编码
const char *sqlite3_errmsg(qlite3 *pDb);
函数作用:用来获取最近调用的数据库API接口返回的错误信息
pDb:sqlite3类型的指针,pDb将会指向数据库
返回值:错误信息(字符串)
int sqlite3_errcode(qlite3 *pDb);
函数作用:用来获取最近调用的数据库API接口返回的错误代码
pDb:sqlite3类型的指针,pDb将会指向数据库
返回值:错误代码
sqlite3_demo1.c
#include <stdio.h>
#include <sqlite3.h>
int main(int argc,char **argv)
{
sqlite3 *db;
int ret;
if(argc !=2){
printf("error:%s xxx.db\n",argv[0]);
return -1;
}
if((ret = sqlite3_open(argv[1],&db)) == SQLITE_OK){
printf("open %s success! ret is %d,errmsg:%s,errcode:%d\n",argv[1],ret,sqlite3_errmsg(db),sqlite3_errcode(db));
}else{
printf("open %s fail! ret is %d,errmsg:%s,errcode:%d\n",argv[1],ret,sqlite3_errmsg(db),sqlite3_errcode(db));
return -2;
}
if((ret = sqlite3_close(db)) == SQLITE_OK){
printf("close %s success\n",argv[1]);
}else{
printf("close %s fail,errcode:%d\n",argv[1],sqlite3_errcode(db));
}
return 0;
}
执行命令语句API
#include <sqlite3.h>
int sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg);
函数作用:
sqlite3:sqlite3类型的指针,指向数据库
sql:sql语句
sqlite_callback:回调函数
data:传递给回调函数的第一个形参
errmsg:char类型二级指针,执行sqlite3_exec()返回错误信息
返回值:成功返回0,失败返回错误代码
回调函数原型:
int callback(void *arg, int column_size, char *column_value[],
char *column_name[]);
函数作用:
arg:sqlite3_exec()函数传递的第四个参数
column_size:数据库的字段数
column_value[]:指针数组,列值
column_name[]:指针数组,字段名字
返回值:返回值必须是0,否则回调函数不会再次被执行
sqlite3_exec_demo1.c
#include <stdio.h>
#include <sqlite3.h>
int callback(void *arg, int column_size, char *column_value[], char *column_name[])
{
int i;
printf("%s\n",(char *)arg);
for(i= 0;i<column_size;i++){
printf("%s = %s\n",column_name[i],column_value[i]);
}
printf("==============\n");
return 0;
}
int main(int argc,char **argv)
{
sqlite3 *db;
int ret;
char *errmsg;
if(argc !=2){
printf("error:%s xxx.db\n",argv[0]);
return -1;
}
if((ret = sqlite3_open(argv[1],&db)) == SQLITE_OK){
printf("open %s success! ret is %d,errmsg:%s,errcode:%d\n",argv[1],ret,sqlite3_errmsg(db),sqlite3_errcode(db));
}else{
printf("open %s fail! ret is %d,errmsg:%s,errcode:%d\n",argv[1],ret,sqlite3_errmsg(db),sqlite3_errcode(db));
return -2;
}
//sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg);
ret = sqlite3_exec(db,"select *from stu;",callback,"msg from exec",&errmsg);
printf("errmsg is %s,ret is %d\n",errmsg,ret);
if((ret = sqlite3_close(db)) == SQLITE_OK){
printf("close %s success\n",argv[1]);
}else{
printf("close %s fail,errcode:%d\n",argv[1],sqlite3_errcode(db));
}
return 0;
}
sqlite3_exec_demo2.c
#include <stdio.h>
#include <sqlite3.h>
#include <string.h>
int callback(void *arg, int column_size, char *column_value[], char *column_name[])
{
int i;
printf("%s\n",(char *)arg);
for(i= 0;i<column_size;i++){
printf("%s = %s\n",column_name[i],column_value[i]);
}
printf("==============\n");
return 0;
}
int main(int argc,char **argv)
{
sqlite3 *db;
int ret;
char *errmsg;
if(argc !=2){
printf("error:%s xxx.db\n",argv[0]);
return -1;
}
if((ret = sqlite3_open(argv[1],&db)) == SQLITE_OK){
printf("open %s success! ret is %d,errmsg:%s,errcode:%d\n",argv[1],ret,sqlite3_errmsg(db),sqlite3_errcode(db));
}else{
printf("open %s fail! ret is %d,errmsg:%s,errcode:%d\n",argv[1],ret,sqlite3_errmsg(db),sqlite3_errcode(db));
return -2;
}
//sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg);
//ret = sqlite3_exec(db,"select *from stu;",callback,"msg from exec",&errmsg);
ret = sqlite3_exec(db,"create table Class01(id Integer,name char,score Integer)",callback,"msg from exec",&errmsg);
if(ret !=SQLITE_OK){
if(strstr(errmsg,"already exists")!=NULL){
printf("table already exists!\n");
}else{
printf("other error!\n");
}
}
//ret = sqlite3_exec(db,"insert into Class01 values(100,'pengkaifan',150);",callback,"msg from exec",&errmsg);
//printf("insert errmsg is %s,ret is %d\n",errmsg,ret);
//ret = sqlite3_exec(db,"update Class01 set name='pp' where id=100;",callback,"msg from exec",&errmsg);
//printf("updata errmsg is %s,ret is %d\n",errmsg,ret);
ret = sqlite3_exec(db,"delete from Class01 where id=100;",callback,"msg from exec",&errmsg);
printf("detele errmsg is %s,ret is %d\n",errmsg,ret);
ret = sqlite3_exec(db,"select *from Class01;",callback,"msg from exec",&errmsg);
printf("select errmsg is %s,ret is %d\n",errmsg,ret);
if((ret = sqlite3_close(db)) == SQLITE_OK){
printf("close %s success\n",argv[1]);
}else{
printf("close %s fail,errcode:%d\n",argv[1],sqlite3_errcode(db));
}
return 0;
}