Linux应用开发: SQLite数据库交叉编译部署与运用

简介: 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 数据。


image.png

二、sqlite数据库编译安装(ARM)

目标:  将sqlite交叉编译后部署到嵌入式开发板环境下运行。


当前使用的目标开发板是: 友善之臂的tiny4412开发板,交叉编译器的版本是官方自带的4.5.1


宿主机采用的是Redhat6.3 、当然使用ubuntu、或者其他发行版都可以。


2.1 SQLite数据库下载

下载地址:  SQLite Home Page

image.png

image.png

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

进入到开发板的控制台终端测试程序。

image.png

目录
相关文章
|
2月前
|
缓存 监控 Linux
在Linux中,如何进行数据库调优?
在Linux中,如何进行数据库调优?
|
6天前
|
存储 API 数据库
QML使用Sqlite数据库存储ListModel数据
本文介绍了在QML中使用Sqlite数据库存储ListModel数据的方法,包括如何创建数据库、读取数据、动态添加和删除数据,以及如何在程序启动和退出时与数据库同步数据。
|
6天前
|
数据库 数据库管理
qt对sqlite数据库多线程的操作
本文总结了在Qt中进行SQLite数据库多线程操作时应注意的四个关键问题,包括数据库驱动加载、加锁、数据库的打开与关闭,以及QsqlQuery变量的使用。
|
2月前
|
人工智能 小程序 Java
【工具】轻松解锁SQLite数据库,一窥微信聊天记录小秘密
本文介绍了一款名为PyWxDump的开源工具,它可以获取微信账户信息、解密SQLite数据库以查看和备份聊天记录。此工具适用于已登录电脑版微信的用户,通过GitHub下载后简单几步即可操作。适合对数据恢复感兴趣的开发者,但请注意合法合规使用并尊重隐私。
206 2
【工具】轻松解锁SQLite数据库,一窥微信聊天记录小秘密
|
8天前
|
SQL 数据库 数据库管理
SQLite 创建数据库
SQLite 的 sqlite3 命令被用来创建新的 SQLite 数据库。您不需要任何特殊的权限即可创建一个数据。
13 0
|
10天前
|
JSON NoSQL 数据库
和SQLite数据库对应的NoSQL数据库:TinyDB的详细使用(python3经典编程案例)
该文章详细介绍了TinyDB这一轻量级NoSQL数据库的使用方法,包括如何在Python3环境中安装、创建数据库、插入数据、查询、更新以及删除记录等操作,并提供了多个编程案例。
24 0
|
2月前
|
SQL 存储 小程序
【教程】navicat配合HTTP通道远程连接SQLite数据库
本文介绍了如何通过 Navicat Premium 工具配合 n_tunnel_sqlite.php 和 HTTP 通道远程连接服务器上的 SQLite 数据库。SQLite 是一种自给自足的、无服务器的 SQL 数据库引擎,由于其端口未对外开放,直接使用 Navicat 进行远程连接不可行。文章详细记录了使用 HTTP 通道实现远程连接的过程,包括定位本地 `ntunnel_sqlite.php` 文件,将其上传至服务器,并通过 Navicat 配置 HTTP 通道连接 SQLite 数据库的具体步骤。
52 0
【教程】navicat配合HTTP通道远程连接SQLite数据库
|
2月前
|
NoSQL Linux C语言
嵌入式GDB调试Linux C程序或交叉编译(开发板)
【8月更文挑战第24天】本文档介绍了如何在嵌入式环境下使用GDB调试Linux C程序及进行交叉编译。调试步骤包括:编译程序时加入`-g`选项以生成调试信息;启动GDB并加载程序;设置断点;运行程序至断点;单步执行代码;查看变量值;继续执行或退出GDB。对于交叉编译,需安装对应架构的交叉编译工具链,配置编译环境,使用工具链编译程序,并将程序传输到开发板进行调试。过程中可能遇到工具链不匹配等问题,需针对性解决。
|
2月前
|
关系型数据库 MySQL Linux
在Linux中,如何配置数据库服务器(如MySQL或PostgreSQL)?
在Linux中,如何配置数据库服务器(如MySQL或PostgreSQL)?
|
2月前
|
存储 前端开发 关系型数据库
Linux 技术架构:前端、后端与数据库的完美融合
【8月更文挑战第25天】本文深入剖析了Linux操作系统的技术架构,重点介绍了前端、后端及数据库三大核心组成部分。Linux前端技术不仅涵盖了图形用户界面(GUI),包括GNOME、KDE等桌面环境,还涉及HTML、CSS、JavaScript等Web前端技术及其相关框架。后端技术则聚焦于Python、Java等多种编程语言、Apache和Nginx等Web服务器以及MySQL、PostgreSQL等数据库管理系统。Linux数据库技术覆盖了关系型和非关系型数据库,如MySQL、MongoDB等,并提供了多种数据库管理工具。
61 0
下一篇
无影云桌面