嵌入式平台数据库 1. 数据库文件与普通文件区别:1.普通文件对数据管理(增删改查)效率低2.数据库对数据管理效率高,使用方便2. 常用数据库:1.关系型数据库将复杂的数据结构简化为二维表格形式大型:Oracle、DB2中型:MySql、SQLServer小型:Sqlite2.非关系型数据库以键值对存储且结构不固定//JSONRedisMongoDB3. 嵌入式数据库sqlite3stu.db1.开源免费 c语言开发2.代码量少1万行左右总大小10M以内3.文件型数据库可以移动4.数据容量最大2T4. sqlite3的安装1.在线安装 sudo apt-get install sqlite3 sudo apt-get install libsqlite3-dev 2.源码安装 1.sqlite-autoconf-3080403源代码.tar.gz拷贝到Ubuntu系统Desktop目录中 2.tar -zxvf sqlite-autoconf-3080403源代码.tar.gz 3.cd sqlite-autoconf-3080403 4../configure // 生成makefile 5.make // 编译源码 6.sudo make install // 安装1.sqlite3 操作指令1)命令2SQL语句增 删 改 查2. sqlite3 API接口应用程序接口)1. sqlite命令:1..help 查看sqlite3支持的相关命令 2..quit 退出sqlite3数据库 3..tables 查看数据库中的所有表 4..schema tablename 查看tablename创建时的SQL语句表的结构 5..headers on/off 开启关闭列名称 6..mode column 以左对齐列宽显示数据 7..width 第一列宽度 第二列宽度 第三列宽度 ...2. SQL语言:1.create table创建表create table 表名称(列名称1 数据类型,列名称2 数据类型,列名称3 数据类型,....)sqlite3数据类型 INTEGER int REALdouble float TEXT: char 字符串 NULL值是一个 NULL值。 表不存在则创建存在不创建 create table if not exists 表名称(列名称1 数据类型,列名称2 数据类型,列名称3 数据类 型,....) 2insert into 插入表 INSERT INTO 表名称 VALUES(值1, 值2,....) 4.select 查表 SELECT * FROM 表名称 SELECT 列名称 FROM 表名称 SELECT 列名称1,列名称2,列名称3 FROM 表名称 5.where 1条件匹配 SELECT 列名称 FROM 表名称 WHERE 列 运算符 值 运算符 ! and or 2模糊查询 SELECT * FROM 表名称 WHERE 列名 like %冬梅 SELECT * FROM 表名称 WHERE 列名 like 马% SELECT * FROM 表名称 WHERE 列名 like 马__ 百分号%代表零个、一个或多个数字或字符。 下划线_代表一个单一的数字或字符。这些符号可以被组合 3顺序显示 selete * form 表名称 order by 列名 ASC; //升序查询 selete * form 表名称 order by 列名 DESC; //降序查询 select * from class1 order by score ASC; 升序查询 select * from class1 order by score DESC;降序查询 6.delete 删除表中信息 DELETE FROM 表名称 WHERE 列名称 值 7.update 改表中信息 UPDATE 表名称 SET 列名称 新值 WHERE 列名称 某值 8.datetime datetime(now, 8 hours); select datetime(now, 8 hours); 查询当前东八区时间 insert into class3 values(1, zhangsan, 99, datetime(now, 8 hours)); insert into class3 values(2, lisi, 100, datetime(now, 8 hours)); insert into class3 values(3, wanger, 98, datetime(now, 8 hours)); 10. 设置主键值自动增长列 create table 表名称(id INTEGER PRIMARY KEY AUTOINCREMENT, 类名称 数据类型, ...); 11. drop table 表名称 删除一张表3.sqlite数据库编程c/c接口:1.编程框架打开数据库---》读写数据库增删改查---》关闭数据库sqlite3.h -lsqlite3 2.sqlite3函数接口: 1.sqlite3_open int sqlite3_open( const char *filename, /* Database filename (UTF-8) */ sqlite3 **ppDb /* OUT: SQLite db handle */ ); 功能 打开一个数据库文件获得操作数据库文件的句柄 如果数据库存在则打开不存在则创建 参数: filename:数据库文件路径 ppDb:存放句柄指针空间的首地址 返回值: 成功返回SQLITE_OK 2.sqlite3_errmsg const char *sqlite3_errmsg(sqlite3*); 功能: 获得出错原因 3.sqlite3_close int sqlite3_close(sqlite3*); 功能 关闭数据库句柄,释放空间 4.sqlite3_exec int sqlite3_exec( sqlite3* pDb, /* 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语句 参数: sqlite3*:数据库句柄 sql :SQL语句字符串首地址 callback:回调函数(只有select时使用) void * :回调函数的传参(只有select时使用) char **errmsg:出错信息存放空间首地址 返回值: 成功返回SQLITE_OK 0 回调函数类型 int fun(void* para,int n_column,char** column_value,char** column_name); 参数 para sqlite3_exec传递的第四个参数 n_column 查询到数据的列数 column_value查询结果每个字段的首地址集合 column_name 查询结果每个字段的字段名称首地址集合 注意 1. 回调函数查询到几行数据就执行几次 2.回调函数必须要返回值否则sqlite3_exec调用失败 3.数据库中查出的数据均为字符串 5.sqlite3_free void sqlite3_free(void*); 功能:释放保存出错信息的空间