Linux下SQLite3的移植与使用

时间:2023-02-12 05:35:53

SQLite3是一个轻便的文件型数据库,非常适合在嵌入式环境使用
我所移植的环境是arm-xilinx-linux-gnueabi

一、准备SQLite3

SQLite3项目地址
https://www.sqlite.org/
下载source code中的sqlite-autoconf-xxx.tar.gz

二、编译

先为编译文件建立一个临时文件夹/alex/prefix/sqlite
解压源文件后后进入文件夹

./configure --host=arm-xilinx-linux-gnueabi --prefix=/alex/prefix/sqlite
make
make install

所有的库,头文件都可以在临时文件夹内找到,编译的时候注意包含路径

三、操作数据库

进入/alex/prefix/sqlite/bin运行

./sqlite3

即可进入数据库管理界面,这里可以新建数据库文件以及直接操作数据库。

下面是一个c调用sqlite的用例

#include <stdio.h>
#include "sqlite3.h"
int main(int argc, char* argv[])
{
sqlite3 *db;
char *zErrMsg = 0;
int rc;

char *ip = "";
char *inputstring;

rc = sqlite3_open("ssdb", &db);

if (rc) {
//printf( "Can't open database: %s\n", sqlite3_errmsg(db));
exit(0);
}
else {
//printf( "Opened database successfully\n");
}


int nrow = 0, ncolumn = 0;
char **azResult; //指针数组存放结果

char *sql = "SELECT * FROM rule";
sqlite3_get_table(db, sql, &azResult, &nrow, &ncolumn, &zErrMsg);

int i = 0;
//printf( "row:%d column=%d \n" , nrow , ncolumn );
//printf( "\nThe result of querying is : \n" );

int count = 0;

printf("[");
for (i = 1; i <= nrow; i++)
{
count = i*ncolumn;
if (i != 1)
{
printf(",");
}
printf("{\"inner_mac\":\"%s\",", azResult[count++]);
printf("\"inner_ip\":\"%s\",", azResult[count++]);
printf("\"inner_port\":\"%s\",", azResult[count++]);
printf("\"outer_mac_fake\":\"%s\",", azResult[count++]);
printf("\"outer_ip_fake\":\"%s\",", azResult[count++]);
printf("\"inner_mac_fake\":\"%s\",", azResult[count++]);
printf("\"inner_ip_fake\":\"%s\",", azResult[count++]);
printf("\"outer_mac\":\"%s\",", azResult[count++]);
printf("\"outer_ip\":\"%s\",", azResult[count++]);
printf("\"outer_port\":\"%s\",", azResult[count++]);
printf("\"remark\":\"%s\",", azResult[count++]);
printf("\"enable\":\"%s\"}", azResult[count++]);
}
printf("]");

//释放掉 azResult 的内存空间
sqlite3_free_table(azResult);

sqlite3_close(db);
}