色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

當(dāng)前位置: > 華清遠(yuǎn)見教育科技集團(tuán) > 嵌入式學(xué)習(xí) > 講師博文 > linux內(nèi)核數(shù)據(jù)庫sqlite3的移植和簡單操作
linux內(nèi)核數(shù)據(jù)庫sqlite3的移植和簡單操作
時(shí)間:2016-12-12作者:華清遠(yuǎn)見

基于嵌入式linux的數(shù)據(jù)庫主要有SQLite, Firebird, Berkeley DB, eXtremeDB

這幾種數(shù)據(jù)庫的特點(diǎn):

1.Firebird是關(guān)系型數(shù)據(jù)庫,功能強(qiáng)大,支持存儲(chǔ)過程、SQL兼容等
        2.SQLite關(guān)系型數(shù)據(jù)庫,體積小,支持ACID事務(wù)
        3.Berkeley DB中并沒有數(shù)據(jù)庫服務(wù)器的概念,它的程序庫直接鏈接到應(yīng)用程序中
        4.eXtremeDB是內(nèi)存數(shù)據(jù)庫,運(yùn)行效率高

SQLite的源代碼是C,其源代碼完全開放,是一個(gè)輕量級的嵌入式數(shù)據(jù)庫。

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

這個(gè)很簡單,在//www.sqlite.org/download.html這個(gè)sqlite主頁的下載目錄中找到對應(yīng)的linux版本。下載完成后解壓,執(zhí)行里面的 configure。如圖:


執(zhí)行完之后要執(zhí)行 sudo make && make install

等待一段時(shí)間就可以安裝完成。

完成以后看一下我們sqlite3的執(zhí)行文件的路徑在哪里如圖:


在/usr/local/bin目錄里。

為了以后的方便,可以將該目錄加入到環(huán)境變量里,先打開 sudo vim /environment 將路徑加入到這里,如何將sqlite3 移植到開發(fā)板上呢?

1、去掉/root/sqlite3.3.6目錄下的sqlite3的調(diào)示信息:(俗稱瘦身)
#arm-linux-strip sqlite3

2、將sqlite3下載到開發(fā)板的/usr/bin目錄:
        在PC機(jī)的目錄/usr/lib 中找到libsqlite3.so.0、libsqlite3.so.0.8.6這兩個(gè)庫文件,去掉調(diào)示信息后把它們復(fù)制到開發(fā)板的/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的目的是將源庫拷貝,千萬別只拷貝個(gè)鏈接,那么就悲劇了。。。

經(jīng)過以上步驟,開發(fā)板上就已經(jīng)有了sqlite數(shù)據(jù)庫。 sqlite的一些基本操作可以在網(wǎng)上找一下,SQL語句都是通用的,所以比較重要的是sqlite3特供的一些操作數(shù)據(jù)庫的接口:

int sqlite3_open(char *path, sqlite3 **db);
        功能:打開sqlite數(shù)據(jù)庫
        path: 數(shù)據(jù)庫文件路徑
        db: 指向sqlite句柄的指針
        返回值:成功返回0,失敗返回錯(cuò)誤碼(非零值)

int sqlite3_close(sqlite3 *db);
        功能:關(guān)閉sqlite數(shù)據(jù)庫
        返回值:成功返回0,失敗返回錯(cuò)誤碼
        const char *sqlite3_errmg(sqlite3 *db);
        返回值:返回錯(cuò)誤信息

gcc -o test test.c -lsqlite3
        }
回調(diào)函數(shù)的定義:
typedef int (*sqlite3_callback)(void *para, int f_num, char **f_value, char **f_name);
}
        功能:每找到一條記錄自動(dòng)執(zhí)行一次回調(diào)函數(shù)
        para:傳遞給回調(diào)函數(shù)的參數(shù)
        f_num:記錄中包含的字段數(shù)目
        f_value:包含每個(gè)字段值的指針數(shù)組
        f_name:包含每個(gè)字段名稱的指針數(shù)組
        返回值:成功返回0,失敗返回-1
int sqlite3_exec(sqlite3 *db, const char *sql, sqlite3_callback callback, void *, char **errmsg);
        功能:執(zhí)行SQL操作
        db:數(shù)據(jù)庫句柄
        sql:SQL語句
        callback:回調(diào)函數(shù)
        errmsg:錯(cuò)誤信息指針的地址
        返回值:成功返回0,失敗返回錯(cuò)誤碼

例如:定義一個(gè)回調(diào)函數(shù),打印記錄中所有字段的名稱和值
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);
}
……

不使用回調(diào)函數(shù)執(zhí)行SQL語句
int sqlite3_get_table(sqlite3 *db, const char *sql, char ***resultp, int*nrow, int *ncolumn, char **errmsg);
函數(shù)功能:執(zhí)行SQL操作
函數(shù)參數(shù):
        db:數(shù)據(jù)庫句柄
        sql:SQL語句
        resultp:用來指向sql執(zhí)行結(jié)果的指針
        nrow:滿足條件的記錄的數(shù)目
        ncolumn:每條記錄包含的字段數(shù)目
        errmsg:錯(cuò)誤信息指針的地址
返回值:成功返回0,失敗返回錯(cuò)誤碼

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; // 第一條記錄的第一個(gè)字段的下標(biāo)
for (i=0; i< nrow; i++)
 {
        for (j=0; j< ncolumn; j++)
        {
        printf("%s : %s\n", resultp[j], resultp[index++]);
        }
}
有了這幾個(gè)函數(shù),數(shù)據(jù)庫的操作就基本上OK了.

發(fā)表評論
評論列表(網(wǎng)友評論僅供網(wǎng)友表達(dá)個(gè)人看法,并不表明本站同意其觀點(diǎn)或證實(shí)其描述)
主站蜘蛛池模板: 夜夜夜夜夜夜久久久久久久 | 新版天堂资源在线 | 精品少妇ay一区二区三区 | 99久久精约久久久久久清纯 | 日韩v亚洲v欧美v精品综合 | 99久久免费热在线精品 | 又大又粗又爽又黄的少妇毛片 | 国产偷窥熟精品视频 | wwxx在线观看免费 | 脱了老师内裤猛烈进入 | 国产精品爱久久久久久久小说 | 国产亚洲精品自在久久VR | 亚洲精品国偷自产在线 | 中文字幕八区 | 人妻 丝袜美腿 中文字幕 | 印度妓女野外xxww | 亚洲欧美日韩中文无线码 | 99精品视频只有精品高清6 | 久久无码人妻丰满熟妇区毛片 | 国产高清精品福利私拍国产写真 | 久久精品久久精品中文字幕 | 中国国产精品视频 | 女人把腿张开让男人来桶 | 国产激情怍爱视频在线观看 | 幼射HD交中国妇 | 国产精品久久久尹人香蕉 | 日韩一卡2卡3卡4卡2021免费观看国色天香 | 免费看A片久久久久久久久久 | 日产精品最新在线 | 精品人妻码一区二区三区 | 亚洲人色婷婷成人网站在线观看 | 丰满日韩放荡少妇无码视频 | 久久精品亚洲中文字幕无码麻豆 | 欧美高清com | 欧美激情一区二区三区高清视频 | 国产高清乱码又大又圆 | 国产Chinese男男GAy视频网 | 夜夜操狠狠操 | 涂了春药被一群人伦爽99势 | 又粗又大又硬毛片免费看 | 在线.www资源|