Linux嵌入式 _ 数据库SQLite3

一、数据库基本概念

1、数据(Data)

  •       能够输入计算机并能被计算机程序识别和处理的信息集合;

2、数据库(Database)

  •        数据库是在 数据库管理系统 管理和控制之下,存放在存储介质上的数据集合;

二、常用数据库

1、大型数据库

  • Oracle公司是最早开发关系数据库的厂商之一,其产品支持最广泛的操作系统平台;目前Oracle关系数据库产品的市场占用率名列前茅。

2、中型数据库

  • Server 是微软开发的数据库产品,主要支持windows平台;

3、小型数据库

mySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL.AB公司,2008年被Sun公司收购,开放源码;

三、基于嵌入式的数据库

  • 基于嵌入式Linux的数据库主要有SQLite,Firebird , Berkeley  DB, eXtremeDB;
  • Firebird是关系型数据库,功能强大,支持存储过程、SQL兼容等;
  • SQLite关系型数据库,体积小,支持ACID事物;
  • Berkeley DB中并没有数据库服务器的概念,它的程序库直接连接到应用程序中;
  • eXtremeDB是存放数据库,运行效率高;

四、SQLite基础

  • SQLite的源代码是C,其源代码完全开放。SQLite第一个AIphal版本诞生于2000年5月。他是一个轻量级的嵌入式数据库。
  • SQLite有以下特性:
    1. 零配置 — 无需安装和管理配置;
    2. 储存在单一磁盘文件中 的一个完整的 数据库;
    3. 数据库文件可以在不同字节顺序的机器间自由共享;
    4. 支持数据大小至2TB;
    5. 足够小,全部源码大概3万行C代码,250KB;
    6. 比目前流行的大多数数据库对数据的操作要快;
  • 数据库一般用来存储 类似 excle表格 的数据,电影等类似的数据存放在 文件系统下;

五、创建数据库

1、Ubuntu 命令行方式操作数据库 数据库的安装

  • Ubuntu中安装 SQLite数据库有两种方式
  1. 第一种 是 :本地安装  sudo dpkg –I  *.deb(三个安装包)
  2. 第二种 是 : 在线安装 sudo  apt-get  install sqlite3

六、数据库常用命令介绍

1、SQLite3基本命令

  • 系统命令
    1. 以’ . ’开头的命令
    2. .help : 帮助
    3. .quit : 退出
    4. .exit : 退出
    5. .schema :查看表的结构图
  • sql命令
    1. 基本的sql命令,不以 ‘ . ‘开头,但是都要以’ ; ‘结尾;
    2. 创建一张数据表  stu
      1. create table  stu(id Integer , name  char , score  Integer);
    3. 插入一条记录
      1. insert into stu  values (1001, ‘zhangsan’ , 80); // 整条记录内容插入
      2. insert into stu (name , score)values(1003 , “wangwu”);//记录 的部分内容插入
    4. 查询记录
      1. select * from stu ;  //查询所有字段的结果;
      2. select name , score from stu ; //查询数据库中的部分字段的内容;

select * from stu where score = 80; //查讯满足条件score = 80 的记录有哪些;

select * from stu where score = 80 and name = “zhangsan”; 查询满足条件score=80与name=” zhangsan”的记录有哪些;

select * from stu where score = 80 or name = “lisi”;

  • 删除一条记录
    1. delete from stu where  score = ‘90’;
  • 更新一条记录
    1. update stu set name = ‘wangwu’ where id = 1001 ; //将id=1001的记录中的name更新为 ‘wangwu’;
    2. update stu set name = ‘wangwu’ , score = 88 where id = 1001 ;
  • 插入一列
    1. alter table stu add column address char ;//添加新的一列 : address char ;
  • 删除一列
    1. sqlite3 不支持,直接删除一列:可以从以下步骤完成操作
      1. 1、创建一张新的表
        1. create table stu1 as select id , name , score from stu;
      2. 2、删除原有的表
        1. drop table stu;
      3. 将新的表名字改成原有的旧表的名字;
        1. alter table stu1 rename to stu;

七、SQLite数据库编程接口

  • int sqlite3_open(char *path  ,  sqlite3 **db);
    1. 功能: 打开sqlite数据库;
    2. path : 数据库文件路径;
    3. db : 指向sqlite句柄的指针;
    4. 返回值 : 成功返回0 , 失败返回错误码(非零值);
  • int sqlite3_close(sqlite3 * db);
    1. 功能: 关闭 sqlite数据库;
    2. 返回值: 成功返回0 ,失败返回错误码;
  • const char *sqlite3_errmg(sqlite3  *db);
    1. 返回值: 返回错误信息;
  • Typedef int (*sqlite3_callback)(void *, int,char ** ,char **);
  • Int sqlite3_exec(sqlite3 *db ,const char *sql,sqlite3_callback callback , void*, char **errmsg);
    1. 功能: 执行SQL操作;
    2. db : 数据库句柄;
    3. callback : 回调函数;
    4. errmsg : 错误信息指针的地址;
    5. 返回值: 成功返回0 , 失败返回错误码;
  • typedef int (*sqlite3_callback)(void *para , int f_num , char **f_value , char **f_name);
    1. 功能: 没找到一条记录自动执行一次回调函数;
    2. para :传递给回调函数参数;
    3. f_num : 记录包含的字段数目;
    4. f_value : 包含每个字段值的指针数组;
    5. f_name : 包含每个字段名称的指针数组;
    6. 返回值: 成功返回0 , 失败返回-1;

八、示例 —— 利用数据库 制作一个 关于学生的 成绩管理系统

  • 功能:通过 键盘的输入 对 该管理系统进行 增删改查 以及退出系统的操作;
#include 
#include 
#include 

#define DATABACK "stu.db"

int do_insert(sqlite3 * db){
	int id = 0;
	char name[32] = {0};
	int score = 0;
	char sql[128] = {0};
	char *errmsg;

	printf("Input id(输入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);
		return -1;
	}else{
		printf("sqlite3 insert success !!!");
	}
	return 0;
}
int do_delete(sqlite3 * db){
	char sql[128] = {};
	int id;
	char * errmsg;

	printf("Input id(需要删除学生记录 的ID) :");
	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 -1;
	}else {
		printf("sqlite3 delete success !!!");
	}
	return 0;
}
int do_update(sqlite3 * db){
	char sql[128] = {};
	int id;
	int score;
	char * errmsg;

	printf("Input id(输入需要修改的score学生的ID) :");
	scanf("%d",&id);
	getchar();

	printf("score 修改为 : ");
	scanf("%d",&score);
	getchar();

	sprintf(sql,"update stu set score=%d where id=%d;",score,id);
	if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) != SQLITE_OK){
		printf("%s\n",errmsg);
		return -1;
	}else {
		printf("sqlite3 update success !!!");
	}
}
#if 0 //使用回调函数的方式 查询 数据库
int callback(void *para,int f_num , char **f_value,char** f_name){
	int i = 0;
	for(i = 0;i

— 在编程中使用接口 打开并创建数据库或,除了直接用查询接口查询该表格外;在ubuntu系统命令下 要在 stu.db的路径下使用 sqlite3 stu.db 命令 才能 .table 以及 .schema 查看该表的内容;

— 在打开数据库后,创建表格时,创建的表格的 要事先不存在的表格,不然会报错;

2、不适用回调函数的 查询数据库函数:

   int sqlite3_get_table(sqlite3 * db , const char *sql , char **resultp, int *nrow , int *ncolumn , char **errmsg);

  —  功能: 执行SQL操作;

  —  db   : 数据库句柄;

  —   sql  : SQL语句;

  —   resultp :用来指向sql执行结果 的指针;

  —   nrow  :满足条件的记录的数目;

  —   ncolumn :每条记录包含的字段数目

  —   errmsg  : 错误信息指针 的地址;

  —  返回值   : 成功返回0 ,失败返回错误码;

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 */
);
void sqlite3_free_table(char **result);
这是一个为向后兼容性而保留的遗留接口。不建议使用此接口。

Linux嵌入式 _ 数据库SQLite3_第1张图片 


int do_query1(sqlite3 * db){
	char sql[128] = {};
	char *errmsg;
	char **resultp;
	int nrow;
	int ncloumn;
	int index;
	int i,j;

	sprintf(sql,"select * from stu;");
	if(sqlite3_get_table(db,sql,&resultp,&nrow,&ncloumn,&errmsg) != SQLITE_OK){
		printf("%s\n",errmsg);
	}else{
		printf("Query done. \n");
	}
	for(j = 0;j

 

你可能感兴趣的:(嵌入式,_,数据库,嵌入式数据库,_,基础)