Linux下SQLite3的移植與使用
阿新 • • 發佈:2019-01-31
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);
}