一、数据库介绍
1.1 数据库简介
数据库是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合,可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、查询、更新、删除等操作。
数据库是存放数据的仓库。它的存储空间很大,可以存放百万条、千万条、上亿条数据。但是数据库并不是随意地将数据进行存放,是有一定的规则的,否则查询的效率会很低。当今世界是一个充满着数据的互联网世界,充斥着大量的数据。即这个互联网世界就是数据世界。数据的来源有很多,比如出行记录、消费记录、浏览的网页、发送的消息等等。除了文本类型的数据,图像、音乐、声音都是数据。
1.2 常用数据库介绍
目前关系型数据库主要有MySQL、SQL Server、数蚕数据库、Oracle数据库。
MySQL:免费产品,中小企业使用广泛。
SQL Server:微软的商业化产品,微软SQL语句兼容性好,商业化成熟度高。
数蚕数据库:数蚕科技针对中小型企业的数据库,c++接口特性良好,SQL特性较弱。
Oracle 数据库:商业化程度最高的关系数据库, 优良的性能和企业扩展能力。
SQLite数据库:是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库一样,不需要在系统中配置。
1.3 sqlite数据库介绍
SQLite数据库是一种嵌入式数据库,他的目标是尽量简单,因此它抛弃了传统企业级数据库的种种复杂特性,只实现对于数据库而言的必备的功能。
尽管简单性是SQLite追求的首要目标,但是其功能和性能都非常出色,它具有这样一些特性:
支持ACID事务(ACID是Automic、Consisten、Isolated和Durable的缩写)
零配置,不需要任何管理性的配置过程
支持SQL92标准
所有数据存放单独的文件中,支持的最大文件可达2TB
数据库可以在不同字节的机器间共享
体积小
系统开销小,检索效率高
简单易用的API接口
可以和TCL、Python、C/C++、JAVA、Ruby、Lua、Perl、PHP等多种语言绑定
自包含,不依赖于外部支持
良好注释的代码
代码测试覆盖率高达95%以上
开放源码,可用于任何合法途径
1.4 sqlite数据库可视化管理工具下载
SQLite Administrator是一款轻量级的sqlite可视化工具,主要可用来管理SQLite数据库文件,可进行创建、设计和管理等操作,具有创建数据库、表、视图、索引、触发器、查询等内容的功能。
SQLite Administrator提供的代码编辑器具有自动完成和语法着色,支持中文,可用于记录个人资料及开发 SQLite 数据。
二、sqlite数据库编译安装(ARM)
目标: 将sqlite交叉编译后部署到嵌入式开发板环境下运行。
当前使用的目标开发板是: 友善之臂的tiny4412开发板,交叉编译器的版本是官方自带的4.5.1
宿主机采用的是Redhat6.3 、当然使用ubuntu、或者其他发行版都可以。
2.1 SQLite数据库下载
下载地址: SQLite Home Page
2.2 编译数据库(ARM)
[wbyq@wbyq pc_work]$ tar xvf /mnt/hgfs/linux-share-dir/sqlite-autoconf-3250200.tar.gz [wbyq@wbyq pc_work]$ cd sqlite-autoconf-3250200/ [wbyq@wbyq sqlite-autoconf-3250200]$ ./configure --host=arm-linux --prefix=$PWD/install [wbyq@wbyq sqlite-autoconf-3250200]$ make && make install [wbyq@wbyq sqlite-autoconf-3250200]$ tree install install ├── bin │ └── sqlite3 ├── include │ ├── sqlite3ext.h │ └── sqlite3.h ├── lib │ ├── libsqlite3.a │ ├── libsqlite3.la │ ├── libsqlite3.so -> libsqlite3.so.0.8.6 │ ├── libsqlite3.so.0 -> libsqlite3.so.0.8.6 │ ├── libsqlite3.so.0.8.6 │ └── pkgconfig │ └── sqlite3.pc └── share └── man └── man1 └── sqlite3.1 7 directories, 10 files [wbyq@wbyq sqlite-autoconf-3250200]$
2.3 搭建编译环境和程序运行环境
1. 将生成的库文件拷贝到开发板的lib目录下,方便开发板上执行包含数据库的可执行文件时,能找到动态库。
[wbyq@wbyq sqlite-autoconf-3250200]$ cp install/lib/*.so* /home/wbyq/rootfs/lib/ -dvf "install/lib/libsqlite3.so" -> "/home/wbyq/rootfs/lib/libsqlite3.so" "install/lib/libsqlite3.so.0" -> "/home/wbyq/rootfs/lib/libsqlite3.so.0" "install/lib/libsqlite3.so.0.8.6" -> "/home/wbyq/rootfs/lib/libsqlite3.so.0.8.6"
2. 为了交叉编译器在编译,包含数据库的源文件时,方便找到头文件和库文件,需要将生成的库文件和头文件分别拷贝到交叉编译目录下。
1.[wbyq@wbyq sqlite-autoconf-3250200]$ sudo cp install/lib/*.so* /home/wbyq/work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root/usr/lib/ -dvf [wbyq@wbyq sqlite-autoconf-3250200]$ sudo cp install/include/* /home/wbyq/work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root/usr/include/ -fv
2.4 编写例子代码
#include <stdio.h> #include <sqlite3.h> /* callback函数只有在对数据库进行select, 操作时才会调用 */ static int select_callback(void *data, int argc, char **argv, char **azColName){ int i; printf("%s", (char*)data); for(i=0; i < argc; i++){ printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; } int main(int argc,char **argv) { sqlite3 *db; int err; char *zErrMsg=0; if(argc!=2) { printf("./app <数据库文件名称>\n"); return 0; } /*1. 创建数据库*/ err=sqlite3_open(argv[1],&db); if(err) { printf("Can't open database: %s\n", sqlite3_errmsg(db)); sqlite3_close(db); return 0; } /*2. 使用字符串形式构造SQL语言*/ /* CREATE TABLE 是告诉数据库系统创建一个新表的关键字。CREATE TABLE 语句后跟着表的唯一的名称或标识 */ char *sql = " CREATE TABLE TempData( \ ID INT PRIMARY KEY, \ DS18B20Name CHAR(7), \ Number INT, \ Time CHAR(12), \ Data FLOAT \ );"; /*3. 使用sql字符串指定的sql语言 创建数据表SensorData*/ sqlite3_exec(db,sql,0, select_callback , &zErrMsg ); /*4. 插入多条数据到数据表*/ sql = "INSERT INTO 'TempData' VALUES(81,'DS18B20',3,'20191109114322',11.4);" ; sqlite3_exec(db,sql,0,select_callback,&zErrMsg ); sql = "INSERT INTO 'TempData' VALUES(84,'DS18B20',6,'20191109114323',22.4);" ; sqlite3_exec(db,sql,0,select_callback,&zErrMsg ); sql = "INSERT INTO 'TempData' VALUES(87,'DS18B20',9,'20191109114323',77.4);" ; sqlite3_exec(db,sql,0,select_callback,&zErrMsg ); /*5. 关闭数据库*/ sqlite3_close(db); printf("数据库关闭成功.\n"); return 0; }
2.5 程序编译测试
all: arm-linux-gcc sqlite_create.c -o app -lsqlite3 cp app /home/wbyq/rootfs/code rm app -f
进入到开发板的控制台终端测试程序。