linux内核数据库sqlite3的移植和简单操作

本文介绍了嵌入式Linux环境下SQLite数据库的安装与使用方法,包括数据库的基本特性、移植步骤及核心API接口。
基于嵌入式linux的数据库主要有SQLite, Firebird, Berkeley DB, eXtremeDB

这几种数据库的特点:

1.Firebird是关系型数据库,功能强大,支持存储过程、SQL兼容等
        2.SQLite关系型数据库,体积小,支持ACID事务
        3.Berkeley DB中并没有数据库服务器的概念,它的程序库直接链接到应用程序中
        4.eXtremeDB是内存数据库,运行效率高

SQLite的源代码是C,其源代码完全开放,是一个轻量级的嵌入式数据库。

SQLite有以下特性:
        零配置一无需安装和管理配置;
        储存在单一磁盘文件中的一个完整的数据库;
        数据库文件可以在不同字节顺序的机器间自由共享;
        支持数据库大小至2TB;
        足够小,全部源码大致3万行c代码,250KB;
        比目前流行的大多数数据库对数据的操作要快;
        这个数据库操作比较简单,首先要安装数据库:

这个很简单,在http://www.sqlite.org/download.html这个sqlite主页的下载目录中找到对应的linux版本。下载完成后解压,执行里面的        configure。如图:


执行完之后要执行 sudo make && make install

等待一段时间就可以安装完成。

完成以后看一下我们sqlite3的执行文件的路径在哪里如图:


在/usr/local/bin目录里。

为了以后的方便,可以将该目录加入到环境变量里,先打开 sudo vim /environment 将路径加入到这里,如何将sqlite3 移植到开发板上呢?

1、去掉/root/sqlite3.3.6目录下的sqlite3的调示信息:(俗称瘦身)
#arm-linux-strip sqlite3

2、将sqlite3下载到开发板的/usr/bin目录:
        在PC机的目录/usr/lib 中找到libsqlite3.so.0、libsqlite3.so.0.8.6这两个库文件,去掉调示信息后把它们复制到开发板的/usr/lib目录下:
        arm-linux-strip libsqlite3.so.0       (/home/linux/sqlite/lib)
                arm-linux-strip libsqlite3.so.0.8.6    (/home/linux/sqlite/lib)
cp –arf libsqlite3.so.0 libsqlite3.so.0.8.6 /usr/lib 加上arf的目的是将源库拷贝,千万别只拷贝个链接,那么就悲剧了。。。

经过以上步骤,开发板上就已经有了sqlite数据库。        sqlite的一些基本操作可以在网上找一下,SQL语句都是通用的,所以比较重要的是sqlite3特供的一些操作数据库的接口:

int   sqlite3_open(char  *path,   sqlite3 **db);
        功能:打开sqlite数据库
        path: 数据库文件路径
        db: 指向sqlite句柄的指针
        返回值:成功返回0,失败返回错误码(非零值)

int   sqlite3_close(sqlite3 *db);
                功能:关闭sqlite数据库
        返回值:成功返回0,失败返回错误码
        const  char  *sqlite3_errmg(sqlite3 *db);
                返回值:返回错误信息

gcc  -o  test  test.c  -lsqlite3
                        }
回调函数的定义:
typedef  int (*sqlite3_callback)(void *para, int f_num, char **f_value, char **f_name);
        }
                功能:每找到一条记录自动执行一次回调函数
        para:传递给回调函数的参数
        f_num:记录中包含的字段数目
        f_value:包含每个字段值的指针数组
        f_name:包含每个字段名称的指针数组
        返回值:成功返回0,失败返回-1
        int   sqlite3_exec(sqlite3 *db, const  char  *sql,  sqlite3_callback callback, void *,  char **errmsg);
                功能:执行SQL操作
        db:数据库句柄
        sql:SQL语句
        callback:回调函数
        errmsg:错误信息指针的地址
        返回值:成功返回0,失败返回错误码

例如:定义一个回调函数,打印记录中所有字段的名称和值
int  callback(void *para, intf_num,  char **f_value, char **f_name)
                {
                        int  i;
                        printf(“*****************************\n”);
                        for (i=0; i< f_num; i++)
              {
                    printf(“%s :  %s\n”,  f_name[i], f_value[i]);
              }
              return  0;
}
sqlite3 *db;
char  *errmsg;

……
if  (sqlite3_exec(db, “select  *  from  table”,  callback,  NULL, &errmsg) !=  SQLITE_OK)
                {
                        printf(“error :  %s\n”,  errmsg);
                        exit(-1);
                }
……

不使用回调函数执行SQL语句
int   sqlite3_get_table(sqlite3 *db, const  char  *sql,  char ***resultp,  int*nrow,  int *ncolumn, char **errmsg);
函数功能:执行SQL操作
        函数参数:
        db:数据库句柄
        sql:SQL语句
        resultp:用来指向sql执行结果的指针
        nrow:满足条件的记录的数目
        ncolumn:每条记录包含的字段数目
        errmsg:错误信息指针的地址
        返回值:成功返回0,失败返回错误码

sqlite3 *db;
                char  *errmsg,**resultp;
                int  nrow,  ncolumn, i, j, index;
……
if  (sqlite3_exec(db, “select  *  from  table”,  &resultp,  &nrow, &ncolumn,  &errmsg) !=  SQLITE_OK)
                {
                        printf(“error :  %s\n”,  errmsg);
                        exit(-1);
                }
                index = ncolumn;    // 第一条记录的第一个字段的下标
for  (i=0;  i< nrow;  i++)
         {
             for  (j=0;  j< ncolumn;  j++)
             {
                   printf(“%s  :  %s\n”,  resultp[j],  resultp[index++]);
               }
}
有了这几个函数,数据库的操作就基本上OK了.

成都市作为中国西部地区具有战略地位的核心都市,其人口的空间分布状况对于城市规划、社会经济发展及公共资源配置等研究具有基础性数据价值。本文聚焦于2019年度成都市人口分布的空间数据集,该数据以矢量格式存储,属于地理信息系统中常用的数据交换形式。以下将对数据集内容及其相关技术要点进行系统阐述。 Shapefile 是一种由 Esri 公司提出的开放型地理空间数据格式,用于记录点、线、面等几何要素。该格式通常由一组相互关联的文件构成,主要包括存储几何信息的 SHP 文件、记录属性信息的 DBF 文件、定义坐标系统的 PRJ 文件以及提供快速检索功能的 SHX 文件。 1. **DBF 文件**:该文件以 dBase 表格形式保存与各地理要素相关联的属性信息,例如各区域的人口统计数值、行政区划名称及编码等。这类表格结构便于在各类 GIS 平台中进行查询与编辑。 2. **PRJ 文件**:此文件明确了数据所采用的空间参考系统。本数据集基于 WGS84 地理坐标系,该坐标系在全球范围内广泛应用于定位与空间分析,有助于实现跨区域数据的准确整合。 3. **SHP 文件**:该文件存储成都市各区(县)的几何边界,以多边形要素表示。每个多边形均配有唯一标识符,可与属性表中的相应记录关联,实现空间数据与统计数据的联结。 4. **SHX 文件**:作为形状索引文件,它提升了在大型数据集中定位特定几何对象的效率,支持快速读取与显示。 基于上述数据,可开展以下几类空间分析: - **人口密度评估**:结合各区域面积与对应人口数,计算并比较人口密度,识别高密度与低密度区域。 - **空间集聚识别**:运用热点分析(如 Getis-Ord Gi* 统计)或聚类算法(如 DBSCAN),探测人口在空间上的聚集特征。 - **空间相关性检验**:通过莫兰指数等空间自相关方法,分析人口分布是否呈现显著的空间关联模式。 - **多要素叠加分析**:将人口分布数据与地形、交通网络、环境指标等其他地理图层进行叠加,探究自然与人文因素对人口布局的影响机制。 2019 年成都市人口空间数据集为深入解析城市人口格局、优化国土空间规划及完善公共服务体系提供了重要的数据基础。借助地理信息系统工具,可开展多尺度、多维度的定量分析,从而为城市管理与学术研究提供科学依据。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值