目录
数据库简介
1.常用数据库
2. SQLite基础
3.创建SQLite数据库
虚拟中sqlite3安装
基础SQL语句使用
sqlite3编程
数据库简介
1.常用数据库
大型数据库 :Oracle
中型数据库 :Server是微软开发的数据库产品,主要支持windows平台
小型数据库 : mySQL是一个小型关系型数据库管理系统。开放源码
2. SQLite基础
SQLite的源代码是C,其源代码完全开放。它是一个轻量级的嵌入式数据库。
SQLite有以下特性:
1.零配置一无需安装和管理配置;
2.储存在单一磁盘文件中的一个完整的数据库;
3.数据库文件可以在不同字节顺序的机器间自由共享;
4.支持数据库大小至2TB(1024G = 1TB);足够小,全部源码大致3万行c代码,250KB;
5.比目前流行的大多数数据库对数据的操作要快;
3.创建SQLite数据库
手工创建
使用sqlite3工具,通过手工输入SQL命令行完成数据库创建.
用户在Linux的命令行界面中输入sqlite3可启动sqlite3工具
代码创建
在代码中常动态创建数据库 在程序运行过程中,当需要进行数据库操作时,应用程序会首先尝试打开数据库,此时如果数据库并不存在,程序则会自动建立数据库,然后再打开数据库
虚拟中sqlite3安装
sqlite3 安装:
1. sudo dpkg -i *.deb 离线安装
2. 在线安装
1、设置能够上网
2、更新更新源
#apt-get update
3、安装软件及开发环境
# apt-get install sqlite3 --->sqlite3数据库软件
# apt-get install libsqlite3-dev --->sqlite3数据库开发支持库
# apt-get install sqlite3-doc --->sqlite3数据库说明文档
--------------------------------
#apt-get install sqlitebrowser
--->sqlite3数据库操作软件
源码安装:
tar xf sqlite-autoconf-3140100.tar.gz
./configure
make
sudo make install
安装完成后,可以使用sqlite3 -version命令来测试是否安装成功
$ sqlite3 -version
3.14.1 2016-08-11
基础SQL语句使用
格式:sqlite3 数据库文件名(stu.db)
(创建一个新的数据库)
两种命令:
1. sqlite3系统命令(类似Windows系统命令,开机关机等,都是以.开头的)
都是以 '.' 开头的
a. .help 查看所有支持的命令
b. .quit 退出
c. .tables 查看有哪些表
d. .schema stu2 查看表结构
2. SQL命令 (具体对数据库怎样操作,对数据库增删改查用SQL命令)
SQL命令是以 “;” 结尾
在库当中创建一个表
(在数据库里面不严格检查数据类型,char可以表示字符,也可以表示字符串
1》创建一个表
create table stu(id int,name char,score float);
create table stu1(id int primary key, name char, score float);
注:把id字段设置为主键(在表中唯一);
字符串:char string text
小数:float real
不支持严格的类型检查的;
2》 删除一个表
drop table
...>;
3》 向表里面插入数据
insert into values(value1, value2,…);
insert into stu values(1,"xiaomingx",99.9);
//只插入部分字段 id name score
insert into stu(id,name) values(4,“xiaoming”)
4》 查找数据
查询表中所有记录
select * from ;
(*表示查询所有的值)
按指定条件查询表中记录
select * from where ;
select * from stu where id=2;
select * from stu where id=2 and name='lisi';
select * from stu where id=1 or name='zhangsan';
select score from stu where name='LiSi' or id=3; //满足条件的某列
select name,score from stu where name='LiSi' or id=3;
select * from stu limit 5; //只查询前n条记录
select * from stu order by id desc; //按id从大到小进行排序
5》 修改(更新)数据
update set , … where ;
update stu set id=10 where id=1;
6》 增加字段
alter table
add column default …;alter table stu add column class int default 1;
(表示添加了一列class,默认值为1)
7》 删除字段(在数据库当中其实不支持直接删除一个字段(及一列),
如果就想删除一列,那么需要三步骤)
1)create table student as select id,name,score from stu;
创建一个student表,从stu表当中复制id,name,score
2) drop table stu;
删除原有的stu表
3) alter table student rename to stu;
重命名
最后一列为1的被删除掉了。
8》删除一行
操作完以后可以图形华界面修改东西,然后在命令行去查看的时候就被修改了。
为什么不用图形化界面而是使用命令方式操作:
因为嵌入式里面用C写代码,C代码里面想实现对数据库进行操作,
用的就上上面的命令,而C里面你不能在里面嵌套图像化界面。
sqlite3编程
API接口文档
头文件:#include <sqlite3.h>
编译:gcc sqlite1.c -lsqlite3
1.int sqlite3_open(char *path, sqlite3 **db);
功能:打开sqlite数据库,如果数据库不存在则创建它
path: 数据库文件路径
db: 指向sqlite句柄的指针
返回值:成功返回SQLITE_OK,失败返回错误码(非零值)
2.int sqlite3_close(sqlite3 *db);
功能:关闭sqlite数据库
返回值:成功返回SQLITE_OK,失败返回错误码
返回值:返回错误信息
3.执行sql语句接口
int sqlite3_exec(
sqlite3 *db, /* An open database */
const char *sql, /* SQL to be evaluated */
int (*callback)(void*,int,char**,char**), /* Callback function */
void *arg, /* 1st argument to callback */
char **errmsg /* Error msg written here */
);
功能:执行SQL操作
db:数据库句柄
sql:要执行SQL语句
callback:回调函数(满足一次条件,调用一次函数,用于查询)
再调用查询sql语句的时候使用回调函数打印查询到的数据
arg:传递给回调函数的参数
errmsg:错误信息指针的地址
返回值:成功返回SQLITE_OK,失败返回错误码
回调函数:
typedef int (*sqlite3_callback)(void *para, int f_num,
char **f_value, char **f_name);
功能:select:每找到一条记录自动执行一次回调函数
para:传递给回调函数的参数(由 sqlite3_exec() 的第四个参数传递而来)
f_num:记录中包含的字段数目
f_value:包含每个字段值的指针数组(列值)
f_name:包含每个字段名称的指针数组(列名)
返回值:成功返回SQLITE_OK,失败返回-1,每次回调必须返回0后才能继续下次回调
4.不使用回调函数执行SQL语句(只用于查询)
int sqlite3_get_table(sqlite3 *db, const char *sql,
char ***resultp, int *nrow, int *ncolumn, char **errmsg);
功能:执行SQL操作
db:数据库句柄
sql:SQL语句
resultp:用来指向sql执行结果的指针
nrow:满足条件的记录的数目(但是不包含字段名(表头 id name score))
ncolumn:每条记录包含的字段数目
errmsg:错误信息指针的地址
返回值:成功返回SQLITE_OK,失败返回错误码
5.返回sqlite3定义的错误信息
char *sqlite3_errmsg(sqlite3 *db);