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);
}