linux核心資料庫sqlite3的移植和簡單操作

來源:互聯網
上載者:User
  基於嵌入式linux的資料庫主要有SQLite, Firebird, Berkeley DB, eXtremeDB 這幾種資料庫的特點: •Firebird是關係型資料庫,功能強大,支援預存程序、SQL相容等•SQLite關係型資料庫,體積小,支援ACID事務•Berkeley DB中並沒有資料庫伺服器的概念,它的程式庫直接連結到應用程式中•eXtremeDB是記憶體資料庫,運行效率高  SQLite的原始碼是C,其原始碼完全開放,是一個輕量級的嵌入式資料庫。 SQLite有以下特性:

          零配置一無需安裝和管理配置;

          儲存在單一磁碟檔案中的一個完整的資料庫;

          資料庫檔案可以在不同位元組順序的機器間自由共用;

          支援資料庫大小至2TB;

          足夠小,全部源碼大致3萬行c代碼,250KB;

          比目前流行的大多數資料庫對資料的操作要快;

這個資料庫操作比較簡單,首先要安裝資料庫:

 

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

 

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.