sqlite3在ARM上的移植

開發環境:

Mini2440 linux-2.6.32.2 內核,

ubuntu9.10 arm-linux-gcc-4.3.2

http://www.sqlite.org/ 上下載 sqlite 源代

二、移植步驟

1. 解壓數據庫源文件並進入解壓後的目錄,如下:

tar -zxvf sqlite-3.6.22.tar.gz

cd sqlite-3.6.22

2. 創建一個目錄 build 並進入該目錄,用於在這個目錄中進行交叉編譯,如下:

mkdir build

cd build

3. build 目錄中運行 sqlite-3.6.22 中的 configure 腳本生成 Makefile 文件,如下:

../configure --host=arm-linux --prefix=/root/sqlite-3.6.22/build/target

選項 host 指定的是用 arm 交叉編譯器進行編譯

選項 prefix 後面的路徑是到時候編譯安裝後目標存放的目錄,你可以任意設置

4. 執行 make make install 命令,如下:

make

如果出現arm-none-linux-gnueabi-gcc: 3.7.6.2": No such file or directory
<command-line>: warning: missing terminating " character
make: *** [sqlite3.lo] 錯誤 1
則修改makefile中的 -DPACKAGE_STRING=/"sqlite 3.7.6.2/" 把sqlite和3.7.6.2中間的空格去掉

make install

編譯和安裝完後,在 /root/sqlite-3.6.22/build/target 目錄中會生成三個目標文件夾,分別是: bin include lib ,然後分別將 bin 下的文件下載到開發板的 /usr/bin 目錄中, lib 下的所有文件下載到開發板的 /usr/lib 目錄中即可。 include 目錄下是 sqlite C 語言 API 的頭文件,編程時會用到。

5. 在開發板上測試移植的 sqlite 數據庫。登錄開發板的 Linux ,執行:

sqlite3 demo.db

sqlite3 是一個 sqlite 的命令行訪問程序, demo.db 是新建的數據庫的名字,必須以 db 作後綴。然後會看到下面的畫面,說明移植成功。

 

 

三、測試
1
、新建數據庫
[rootMrFeng]#sqlite3 test.db
SQLite version 3.6.18
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> create table film (number,name);
sqlite> insert into film values (1,'aaa');
sqlite> insert into film values (2,'bbb');
sqlite> select * from film;
1|aaa
2|bbb
sqlite>.quit
[rootMrFeng]#
藍色部分爲輸入。
2
、測試程序
這裏以SQLite 官方站點http://sqlite.org quick start 文檔中的測試程序爲例對移植到ARM -Linux 上的SQLite3 進行測試。該程序清單如下:
//test_sqlite.c

#include <stdlib.h>

#include <stdio.h>

#include <sqlite3.h>

static int callback(void *NotUsed, int argc, char **argv, char **azColName)

{

    int i;

    for(i=0; i<argc;i++)

    {

        printf("%s = %s/n", azColName[i], argv [i]);

    }

    printf("/n");

   return 0;

}

int main(int argc, char **argv)

{

    sqlite3 *db;

    char *zErrMsg = 0;

    int rc;

    if( argc!=3 )

    {

        fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT/n", argv[0]);

    }

    rc = sqlite3_open(argv[1], &db);

    if( rc )

    {

        fprintf(stderr, "Can't open database: %s/n", sqlite3_errmsg(db));

        sqlite3_close(db);

    }

    rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg);

    if( rc!=SQLITE_OK )

    {

        fprintf(stderr, "SQL error: %s/n", zErrMsg);

    }

    sqlite3_close(db);

    return 0;

}

 

使用如下命令編譯測試程序:

交叉編譯時採用arm-linux-gcc -I /…… (安裝路徑)/include -L/……( 安裝路徑)/lib -o target src -lsqlite3

arm-linux-gcc -o test_sqlite test_sqlite.c -lsqlite3 -L /opt/FriendlyARM/mini2440/sqlite-3.7.3/build/lib/ -I /opt/FriendlyARM/mini2440/sqlite-3.7.3/build/include/


3 、在上面新建的數據庫目錄下測試:
[rootMrFeng]#./test_sqlite   test.db   "select * from film"
number = 1
name = aaa

number = 2
name = bbb

[rootMrFeng]#

 

   1)
   創建數據庫文件:
   >SQLite3 test.db 回車
   就生成了一個test.db在d盤。
   這樣同時也SQLite3掛上了這個test.db
   2)
   用.help可以看看有什麼命令
   >.help 回車即可
   3)可以在這裏直接輸入SQL語句創建表格 用;結束,然後回車就可以看到了
   4)看看有創建了多少表
   >.tables
   5)看錶結構
   >.schema 表名
   6)看看目前掛的數據庫
   >.database
   7)如果要把查詢輸出到文件
   >.output 文件名
   > 查詢語句;
   查詢結果就輸出到了文件c:/query.txt

   把查詢結果用屏幕輸出
   >.output stdout

   8)把表結構輸出,同時索引也會輸出
     .dump 表名
   9)退出
   >.exit 或者.quit

發佈了19 篇原創文章 · 獲贊 22 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章