Linux应用开发: SQLite数据库交叉编译部署与运用
作者:互联网
一、数据库介绍
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. 为了交叉编译器在编译,包含数据库的源文件时,方便找到头文件和库文件,需要将生成的库文件和头文件分别拷贝到交叉编译目录下。
[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
进入到开发板的控制台终端测试程序。
标签:SQLite,lib,wbyq,数据库,sqlite,编译,libsqlite3,Linux,sqlite3 来源: https://blog.csdn.net/xiaolong1126626497/article/details/120669354