色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í)其描述)
主站蜘蛛池模板: 夜夜揉揉日日人人 | 99久久免费国产精品四虎 | 夜夜夜夜操18岁 | 18禁无码永久免费无限制网站 | 亚欧中文字幕 | 中文字幕超清在线免费 | 亚洲午夜久久久久妓女影院 | 人妻熟妇乱又伦精品视频 | 日韩美女一区二区三区在线观看 | 尹人在线最新香蕉视频 | 乱人伦人妻中文字幕无码久久网 | 狠狠色丁香四月婷婷综合 | 人人澡人人澡人人澡澡 | 妺妺晚上吃我精子黄文 | 久99久热 | 少妇在宾馆高潮不断狂叫床 | 日本japanesexxxx高潮 | 亚洲午夜成人片在线 | 国产精品AV一区二区三区不卡蜜 | 色哟哟国产精品免费观看 | 18禁无遮拦无码国产在线播放 | 18禁止进入黄大全在线 | 国产精品中文字幕一区二区 | 成人午夜精品久久久久久久网站 | 裸体美女扒开下部无遮挡网站免费 | 日产精品最新在线 | 亚州国产精日韩色情AV | 成人精品视频一区二区三区 | 亚洲av永久综合在线观看红杏 | 亚洲中文字幕av一区二区三区 | 国产精品AV一区二区三区不卡蜜 | 亚洲香蕉免费有线视频 | 日韩人妻一区二区三区免费 | 国产成人精品日本亚洲18 | 中日韩精品视频在线观看 | 麻豆一区二区三区在线观看 | 东北丰满老熟女 | 麻豆少妇 | 美女裸体18禁免费网站 | japanesexxxx日本妇伦 | 亚洲中文波霸中文字幕 |