您的位置:首页 > 数据库

软件数据库移植及数据表设计

2013-04-11 11:05 239 查看
软件数据库移植及数据表设计
 

1.    数据库简介

常用的数据库有Oracle,mySQL和SQLite,Oracle属于商业软件,需要购买,会增加产品成本;mySQL社区版是免费软件,但占用资源较多,且不易移植;SQLite是一个精简版的数据库软件,免费高效,支持绝大部分SQL指令。因此考虑到系统总体性能和资源占用,采用SQLite作为系统的数据库软件。

 

SQLite数据库特点有:

(1) 完全开源,无需独立的数据库引擎,直接嵌入到应用程序进程中,因此,通过API,应用程序可以直接操作它。

(2) 事务的处理是原子的,一致的,独立的,可持久化的(ACID),即使在系统崩溃和掉电后,也不用担心数据遭到破坏。

(3) SQLite数据库通过独占性与共享锁来实现事务的独立处理。

(4) 一个单独的跨平台的磁盘文件就能够存储一个数据库。

(5) 能支持2TB级的数据。

(6) 自包含,无外部依赖性。

(7) 支持NULL,INTEGER,NUMERIC,REAL,TEXT和BLOG等数据类型。

(8) SQLite数据库没有用户帐户的概念。数据库的权限仅依赖于文件系统。

 

2.    数据库移植

1.1   开发环境

硬件平台:VirtualBox虚拟机4.1.8 r75467

操作系统: Fedora14

Linux内核版本:2.6.35.14-106.fc14.i686

GCC编译器版本:4.5.1 20100924

嵌入式处理器:AT91SAM9x35

嵌入式Linux内核版本:2.6.39(基于Atmel提供的移植版修改)

嵌入式工具链:arm-linux-gcc 4.4.3

开环环境相关信息截图
 

1.2   下载解压源码

从官方网站www.sqlite.org下载源码包sqlite-autoconf-3071100.tar.gz,目前最新版本为3.7.11,解压到/home/cmmb/sqlite-autoconf-3071100,并建立一个同级目录/home/cmmb/sqlite-autoconf-3071100/arm,作为嵌入式设备的输出路径

 

# tar xvzf sqlite-autoconf-3071100.tar.gz –C /home/cmmb/

# mkdir /home/cmmb/sqlite-autoconf-3071100/arm

 

解压文件
 

解压源码包得到的文件
 
1.3   源码配置

进入建立的arm目录,再调用configure配置源码,指定输出目录为当前目录

# cd /home/cmmb/sqlite-autoconf-3071100/arm

# ../configure --host=arm-linux --prefix=/home/cmmb/sqlite-autoconf-3071100/arm --disable-tcl

编译器会开始自动检测编译环境和配置编译参数,可以查看输出的信息,如果一切顺利的话,会在 /home/cmmb/sqlite-autoconf-3071100/arm目录下生成一些相关文件: config.log、config.status、libtool、Makefile、sqlite3.pc

启动源码配置

生成的配置文件
 

1.4   编译安装

# make; make install

启动编译,并在编译完成后启动安装,若一切顺利无错误发生,则:

A) 会在/home/cmmb/sqlite-autoconf-3071100/arm/bin生成二进制可执行文件sqlite3

B) 会在/home/cmmb/sqlite-autoconf-3071100/arm/include生成头文件sqlite3.h,

C) 会在/home/cmmb/sqlite-autoconf-3071100/arm/lib生成libsqlite3.so.0.8.6动态库文件和libsqlite3.a静态库文件等。

 

这样就生成了用在arm-linux下的sqlite3和相关lib文件。

 

编译结果和输出文件
 

进入lib目录,用file命令查看生成的libsqlite3.so.0.8.6库文件信息,若显示的是未strip过的,则说明文件包含有调试信息。在产品使用中调试信息用不到,可以用strip命令将其去掉,执行文件大小也将小很多。命令如下:

# cd lib

# file libsqlite3.so.0.8.6

libsqlite3.so.0.8.6: ELF 32-bit LSB shared object, ARM, version 1 (ARM),not stripped

# arm-linux-strip libsqlite3.so.0.8.6

       

至此移植完成,将pc上交叉编译的bin和lib文件夹复制到嵌入式Linux文件系统中,测试sqlite:

# sqlite3

SQLite version 3.7.11

Enter ".help" for instructions

sqlite>

 

1.5   应用程序编译测试

准备一个最简单的C程序testdb.c,简单的执行打开数据库和关闭数据库的动作

#include <string.h>

#include <stdlib.h>

#include <stdio.h>

#include <unistd.h>

#include <sqlite3.h>

 

int main()

{

int res;

const char*dbfile="test.db";

sqlite3* db;

res=sqlite3_open(dbfile,&db);

if ( res != 0 )

{

  printf("Open SQL Database Fail\n");

  exit(EXIT_FAILURE);

}

 

res=sqlite3_close(db);

if ( res != 0 )

{

             printf("Close SQL Database Fail\n");

             exit(EXIT_FAILURE);

}

 

exit(EXIT_SUCCESS);

}

 

# arm-linux-gcc testdb.c -o testdb.out -lsqlite3 -L/home/cmmb/sqlite-autoconf-3071100/arm/lib -I/home/cmmb/sqlite-autoconf-3071100/arm/include

可以看到输出文件 testdb.out,用file命令查看显示为ARM程序文件,将其放到板子上运行测试。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  LINUX 数据库