SQLite数据库移植

发布时间:2023-05-31  

SQLite是一款轻型的数据库,它遵守ACID的关系型数据库管理系统,包含在一个相对小的C库中。它的设计目标是嵌入式系统,目前已经在很多嵌入式产品中使用,其占用资源非常低,在嵌入式设备中,只需要几百K的内存就够了。SQLite能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,还具有ODBC接口,比起MySQL、PostgreSQL这两款开源的著名数据库管理系统来,它的处理速度比他们都要快。同时,SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的SQL数据库引擎。SQLite是一个零配置的数据库,这意味着与其他数据库不一样,它不需要在系统中配置。

下面就来讨论一下,如何把SQLite移植到嵌入式Linux系统中。以下是在S3C2416嵌入式开发板上(Linux3.6.6内核)移植SQLite3.33.0的具体步骤。 

1、通过官网(https://www.sqlite.org/2020/sqlite-autoconf-3330000.tar.gz)或其他网站下载SQLite3.33.0的源码,本例下载的压缩包名为sqlite-autoconf-3330000.tar.gz(注意一定要下载自动配置的autoconf版本)。
2、执行命令“tar -zxvf sqlite-autoconf-3330000.tar.gz -C /tmp”,把源码解压到“/tmp”目录下。
3、进入解压好的源码目录,然后执行命令“./configure --prefix=/opt/SQLite3 --target=arm-linux --host=arm-linux LD=arm-linux-ld”,对源码进行配置,安装路径配置为“/opt/SQLite3”。
4、配置完成后执行命令“make”对源码进行编译。
5、编译完成后执行命令“make install”进行本地安装。
6、安装完成后执行“cd /opt/SQLite3”进入安装目录,可发现编译好的SQLite3.33.0就安装在该目录下,会有bin、include、lib和share等4个目录。
7、拷贝bin目录下生成的可执行文件sqlite3到嵌入式开发板上的“/usr/bin”目录下。
8、拷贝lib目录下以libsqlite3.so开头的库文件到嵌入式开发板上的“/usr/lib”目录下,拷贝时注意要保持原有的链接(cp命令加参数“-d”)。
9、在开发板上执行sqlite3即可启动sqlite3.33.0了,如下图所示。

退出SQLite用命令“.exit”(或“.quit”)。 

下面来测试一下,先建立一个名为test.db的数据库文件,然后再向里面写入两条数据,具体如下图所示。

接下来编写一个C程序来读取上面建立的test.db数据库及表,代码如下。

#include
#include
static int callback(void *NotUsed, int argc, char **argv, char **azColName)
{
int i;
for(i=0; i
printf("%s = %sn", azColName[i], argv[i]?argv[i]:"NULL");
printf("n");
return 0;
}
int main(int argc, char **argv)
{
sqlite3 *db;
char *zErrMsg = 0;
int rc;
if(argc != 3)
{
fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENTn", argv[0]);
return 1;
}
rc = sqlite3_open(argv[1], &db);
if(rc)
{
fprintf(stderr, "Can't open database: %sn", sqlite3_errmsg(db));
sqlite3_close(db);
return 1;
}
rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg);
if(rc != SQLITE_OK)
{
fprintf(stderr, "SQL error: %sn", zErrMsg);
sqlite3_free(zErrMsg);
}
sqlite3_close(db);
return 0;
}

把上述代码存为一个名为SQLitetest.c的程序文件,然后进行交叉编译。 由于在编译时要用到SQLite中的库文件和头文件,所以需要在编译时加下库文件和头文件所在的路径。

执行“arm-linux-gcc SQLitetest.c -o SQLitetest -I /opt/SQLite3/include -L /opt/SQLite3/lib -l sqite3”进行交叉编译,其中的库文件和头文件路径为前面编译安装SQLite3时的路径。完成后会生成可执行文件SQLitetest,然后把它拷贝到嵌入式开发板上。

在嵌入式开发板上执行./SQLitetest /test.db "select * from tbl",就可以看到程序读取数据库的效果了,如下图所示。

 

至此,证明SQLite3数据库移植成功!


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>