色偷偷偷亚洲综合网另类,亚洲欧美另类在线观看,欧美午夜激情在线,久久久精品一区

當前位置: > 華清遠見教育科技集團 > 嵌入式學習 > 講師博文 > linux內核數據庫sqlite3的移植和簡單操作
linux內核數據庫sqlite3的移植和簡單操作
時間:2016-12-12作者:華清遠見

基于嵌入式linux的數據庫主要有SQLite, Firebird, Berkeley DB, eXtremeDB

這幾種數據庫的特點:

1.Firebird是關系型數據庫,功能強大,支持存儲過程、SQL兼容等
        2.SQLite關系型數據庫,體積小,支持ACID事務
        3.Berkeley DB中并沒有數據庫服務器的概念,它的程序庫直接鏈接到應用程序中
        4.eXtremeDB是內存數據庫,運行效率高

SQLite的源代碼是C,其源代碼完全開放,是一個輕量級的嵌入式數據庫。

SQLite有以下特性:
        零配置一無需安裝和管理配置;
        儲存在單一磁盤文件中的一個完整的數據庫;
        數據庫文件可以在不同字節順序的機器間自由共享;
        支持數據庫大小至2TB;
        足夠小,全部源碼大致3萬行c代碼,250KB;
        比目前流行的大多數數據庫對數據的操作要快;
        這個數據庫操作比較簡單,首先要安裝數據庫:

這個很簡單,在//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了.

發表評論
評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
色偷偷偷亚洲综合网另类,亚洲欧美另类在线观看,欧美午夜激情在线,久久久精品一区
主站蜘蛛池模板: 欧美孕妇性xx| 亚州成人av在线| 97热精品视频官网| 91视频免费网站| 日韩资源在线观看| 97精品在线视频| 亚洲精品少妇网址| 欧美激情a在线| 亚洲国产另类久久精品| 久久国产天堂福利天堂| 国产脚交av在线一区二区| 亚洲无限av看| 日韩美女视频在线观看| 国产一区二区三区三区在线观看 | 热久久免费国产视频| 亚洲欧美国产va在线影院| 国精产品一区一区三区有限在线| 亚洲国产精品免费| 欧美韩国理论所午夜片917电影| 亚洲第一二三四五区| 欧美激情视频在线免费观看 欧美视频免费一| 91精品久久久久久久久久入口| 久久亚洲精品网站| 91丨九色丨国产在线| 欧美性xxxx在线播放| 亚洲国产精彩中文乱码av在线播放 | 久久久国产视频| 91在线观看免费高清| 久久久久久久久久久人体 | 26uuu另类亚洲欧美日本一| 国产亚洲人成网站在线观看 | 国产精品久久久久久久久久三级 | 欧美区二区三区| 亚洲国产美女精品久久久久∴| 97人人做人人爱| 久久天堂电影网| 亚洲欧洲日产国码av系列天堂| 国产精品久久久久久av福利软件 | 久久韩剧网电视剧| 日韩大片免费观看视频播放| 日韩av电影国产|