<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > RFID安檢系統(tǒng)的嵌入式Linux解決方案

          RFID安檢系統(tǒng)的嵌入式Linux解決方案

          作者: 時(shí)間:2011-05-09 來源:網(wǎng)絡(luò) 收藏

            3.1 sqlite3數(shù)據(jù)庫的移植

            sqlite3數(shù)據(jù)庫的移植過程如下所述:
            (1)首先從sqlite官網(wǎng)上下載最新的sqlite3源碼包;

            (2)解壓源碼包,并進(jìn)入解壓目錄:
            tar -zxvf sqlite-3.6.23.1.tar.gz
            cd sqlite-3.6.23.1

            (3)配置Configure腳本,使用相關(guān)選項(xiàng)生成編譯文件Makefile文件:
            ./configure–-enable-share –-prefix=./sqlite-3.6.23.1/result –-host=arm-linux
            選項(xiàng) -enable-share指定使用的共享庫
            選項(xiàng) -prefix指定了安裝目錄為./sqlite-3.6.23.1/result
            選項(xiàng) -host指定了編譯環(huán)境為目標(biāo)機(jī)為arm的交叉編譯環(huán)境

            (4)交叉編譯,生成終端下數(shù)據(jù)庫的管理程序和庫文件, 最終在result目錄下得到數(shù)據(jù)庫管理程序sqlite3(相當(dāng)于Windows下Access程序),提供編程所需的API的動(dòng)態(tài)庫libsqlite3.so.0.8.6,編程所需的頭文件sqlite3ext.h sqlite3.h。交叉編譯的命令如下:
            Make
            Make install

            (5)將數(shù)據(jù)庫管理程序sqlite3、提供編程所需的API的動(dòng)態(tài)庫libsqlite3.so.0.8.6及其1個(gè)軟鏈接拷貝到開發(fā)板根文件相應(yīng)位置,分別在終端的/usr/bin和/usr/lib這兩個(gè)目錄下,命令如下:
            Cp result/bin/sqlite3 /arm-linux/usr/bin
            Cp –l result/lib/libsqlite3.so* /arm-linux/usr/lib

            (6)為了能在開發(fā)機(jī)上編譯,調(diào)用了sqlite3數(shù)據(jù)庫的API的應(yīng)用程序,需要將動(dòng)態(tài)庫libsqlite3.so.0.8.6及其2個(gè)軟鏈接、2個(gè)頭文件拷貝到交叉編譯工具鏈所在目錄的適當(dāng)位置,至此sqlite3數(shù)據(jù)庫的移植和開發(fā)環(huán)境的配置已完成。只要輸入SQL語言便可以進(jìn)行相關(guān)操作。

            3.2 下sqlite3的C語言開發(fā)

            sqlite3里最常用到的是sqlite3 *類型。從數(shù)據(jù)庫打開時(shí)開始,sqlite3就要為這個(gè)類型準(zhǔn)備好內(nèi)存,直到數(shù)據(jù)庫關(guān)閉,整個(gè)過程都需要用到這個(gè)類型。數(shù)據(jù)庫打開時(shí)起,這個(gè)類型的變量就代表了所要操作的數(shù)據(jù)庫。
            (1)打開數(shù)據(jù)庫API接口函數(shù)
            int sqlite3_open(文件名, sqlite3 *);
            用這個(gè)函數(shù)開始數(shù)據(jù)庫操作。需要傳入兩個(gè)參數(shù),其中之一是數(shù)據(jù)庫文件名,例如:/home/test.db文件名不需要一定存在,如果此文件不存在,sqlite3會(huì)自動(dòng)建立;如果存在,就嘗試把它當(dāng)數(shù)據(jù)庫文件打開。
            sqlite3 * 參數(shù)即前面提到的關(guān)鍵數(shù)據(jù)結(jié)構(gòu)。函數(shù)返回值表示操作是否正確,如果是SQLITE_OK則表示操作正常。相關(guān)的返回值sqlite3定義了一些宏,具體這些宏的含義可以參考sqlite3.h文件。

            (2)關(guān)閉數(shù)據(jù)庫API接口函數(shù)
            int sqlite3_close(sqlite3 *);
            如果前面用sqlite3_open開啟了一個(gè)數(shù)據(jù)庫,結(jié)尾時(shí)不要忘了用這個(gè)函數(shù)關(guān)閉數(shù)據(jù)庫。

            (3)執(zhí)行SQL語句API接口
            由于sqlite3數(shù)據(jù)庫支持SQL語言,因而調(diào)用C中相關(guān)執(zhí)行函數(shù)就如同在終端下操作數(shù)據(jù)庫一樣方面快捷,下面是具體的API函數(shù):
            這就是執(zhí)行一條sql語句的函數(shù)。
            Int sqlite3_exec(sqlite3 * db, const char *sql,sqlite3_callback,Void * ,char ** errmsg);
            參數(shù)1是調(diào)用打開數(shù)據(jù)庫函數(shù)sqlite3_open()打開的數(shù)據(jù)庫對(duì)象。
            參數(shù)2 是一條待執(zhí)行的SQL語句,其語法格式同標(biāo)準(zhǔn)SQL語言規(guī)范一樣,如創(chuàng)建 table時(shí)插入的記錄如下:
            create table student(id varchar(10) primary key, age smallint);
            此語句創(chuàng)建了名為student的表,表中定義了id(學(xué)號(hào))和年紀(jì)兩個(gè)變量,其中id是主鍵。
            Insert into student values(12345678,21);
            此語句向student表中插入一組數(shù)據(jù)(12345678,21),其中學(xué)號(hào)為12345678,學(xué)生年齡為21。
            對(duì)于數(shù)據(jù)庫的其他操作,如數(shù)據(jù)庫更新、修改、查找等用法同上。
            參數(shù)3 sqlite3_callback是自定義的回調(diào)函數(shù),對(duì)執(zhí)行結(jié)果的每一行都執(zhí)行一次這個(gè)函數(shù)。
            參數(shù)4 void *是調(diào)用者所提供的指針,你可以傳遞任何一個(gè)指針參數(shù)到這里,這個(gè)參數(shù)最終會(huì)傳到回調(diào)函數(shù)里,如果不需要傳遞指針給回調(diào)函數(shù),可以填NULL。
            參數(shù)5 char ** errmsg是錯(cuò)誤信息。sqlite3里面有很多固定的錯(cuò)誤信息。執(zhí)行sqlite3_exec之后,如果執(zhí)行失敗則可以查閱這個(gè)指針,即可知道執(zhí)行過程中錯(cuò)誤發(fā)生的位置。

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();