分类 | 包含 |
---|---|
大型数据库 | Oracle IBM |
中型数据库 | Server(微软,windows平台) |
小型数据库 | MySQL(被sum收购,sum'被Oracle收购) |
MySQL使用在网站中较多。
数据库 | 描述 |
---|---|
Firebird | 关系型。功能强大,支持存储过程,SQL兼容 |
SQLite | 关系型。体积小,支持ACID事务 |
Berkeley DB | 无数据服务器概念,程序库直接链接到应用程序中 |
eXtremeDB | 内存数据库,运行效率高 |
SQlite特性:
- 零配置,无须安装和管理配置
- 储存在单一磁盘文件中的一个完整数据库
- 数据库文件可以在不同字节顺序的机器间自由共享
- 支持数据库大小至2TB
- 足够小,全部源码大致3万行c代码,250KB
- 比目前流行的大多数数据库对数据的操作要快
sqlite 不进行类型检查,即插入错误类型时,不检查
Linux下(Ubuntu)
SQlite3安装:
- 本地安装 sudo dnkg -i *.deb
- 在线安装 sudo apt-get install sqlite3
SQlite3基本命令:
1. 系统命令:以“.”开始
.schema---查看表的结构图
.help--------帮助命令
.databases-----------查看当前打开的数据库
.table----------------查看当前打开数据库中的表
2. sql命令:以“;”结尾
创建表格: create table table_name(字段名 字段类型,字段名 字段类型,···);
插入记录:insert into table_name values(对应字段值);----------------完全插入
insert into table_name(字段1,字段2···) values(字段1值,字段2值···);------------部分插入
查询记录:select * from table_name;---------完全查询
select 字段名 from table_name;-----------部分查询
select * from table_name where XXX;---------条件查询
删除记录:delete from stu where XXX;------------条件删除;
更新记录: update table_name set 字段1=字段1值,字段2=字段2值,···【 where XXX】;
添加表的列: alter table tabe_name add column 字段名 字段类型;
删除表的列:SQLite3不支持删除一列,
1.新建一张新表
2.删除一张旧表
3.新表改旧表名
create table table_name1 as select 字段1,字段2 ···from tabel_name;
drop table_name;
alter table tabel_name1 rename to table_name;
SQlite编程接口
接口官方信息:https://www.sqlite.org/c3ref/funclist.html
int sqlite3_open(
const char *filename, /* Database filename (UTF-8) */
sqlite3 **ppDb /* OUT: SQLite db handle */
);
功能:打开一个sqlite数据库
参数:filename 数据库路径名
ppDb 代表的是数据库的操作句柄(指针)
返回值:成功 SQLITE_OK,
错误:错误代码
int sqlite3_close(sqlite3 *db)
功能:关闭sqlite数据库
返回值:成功 SQLITE_OK
错误 返回错误码
const char *sqlite3_errmg(sqlite3*db)
功能:通过db句柄,得到数据库操作的错误信息
返回值:返回错误信息首地址
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
int (*callback)(void*para,int f_num,char**f_value,char**f_name), /*Callback function */
查询的结构,是一个函数指针类型,传递一个函数名即可
功能:每找到一条记录,自动执行一次回调函数
参数:para 传递给回调函数的参数
f_num 记录中包含的字段数目
f_value 包含每个字段值的指针数组
f_name 包含每个字段名称的指针数组
返回值:成功 返回0
失败 返回-1
例子:sqlite3 *db;char * errmsg;
sqlite3_exec(db,"create table stu ( id Integer,name char , score Integer);",NULL,NULL,&errmsg)
注:此处sql语句可以不加分号,也可以加分号。
getchar();回收垃圾字符,一般为回车
sprintf(sql,"insert into stu values(%d,'%s',%d);",id,name,score);//拼接字符串
int sqlite3_get_table(
sqlite3 *db, /* An open database */
const char *zSql, /* SQL to be evaluated */
char ***pazResult, /* Results of the query */
int *pnRow, /* Number of result rows written here */
int *pnColumn, /* Number of result columns written here */
char **pzErrmsg /* Error msg written here */
);
功能:执行sql操作
参数:db 数据库句柄
zSql sql语句
pazResult 用来指向sql执行结果的指针
pnRow 满足条件的记录数据
pnColumn 每条记录包含的字段述目
errmsg 错误信息的指针地址
返回值:成功
失败
printf("%-11s ",id);左对齐,右侧填空格,宽度为11
sqlite3_get_table()用完之后要立即释放空间
void sqlite3_free_table(char **result);
功能:释放空间