日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

SQLite教程(二):C/C++接口簡介

瀏覽:577日期:2023-04-05 14:56:03

一、概述:

    在SQLite提供的C/C++接口中,其中5個APIs屬于核心接口。在這篇博客中我們將主要介紹它們的用法,以及它們所涉及到的核心SQLite對象,如database_connection和prepared_statement。相比于其它數(shù)據(jù)庫引擎提供的APIs,如OCI、MySQL API等,SQLite提供的接口還是非常易于理解和掌握的。
   
二、核心對象和接口:

    1. 核心對象:
    在SQLite中最主要的兩個對象是,database_connection和prepared_statement。database_connection對象是由sqlite3_open()接口函數(shù)創(chuàng)建并返回的,在應(yīng)用程序使用任何其他SQLite接口函數(shù)之前,必須先調(diào)用該函數(shù)以便獲得database_connnection對象,在隨后的其他APIs調(diào)用中,都需要該對象作為輸入?yún)?shù)以完成相應(yīng)的工作。至于prepare_statement,我們可以簡單的將它視為編譯后的SQL語句,因此,所有和SQL語句執(zhí)行相關(guān)的函數(shù)也都需要該對象作為輸入?yún)?shù)以完成指定的SQL操作。
   
    2. 核心接口:
    1). sqlite3_open
    上面已經(jīng)提到過這個函數(shù)了,它是操作SQLite數(shù)據(jù)庫的入口函數(shù)。該函數(shù)返回的database_connection對象是很多其他SQLite APIs的句柄參數(shù)。注意,我們通過該函數(shù)既可以打開已經(jīng)存在的數(shù)據(jù)庫文件,也可以創(chuàng)建新的數(shù)據(jù)庫文件。對于該函數(shù)返回的database_connection對象,我們可以在多個線程之間共享該對象的指針,以便完成和數(shù)據(jù)庫相關(guān)的任意操作。然而在多線程情況下,我們更為推薦的使用方式是,為每個線程創(chuàng)建獨(dú)立的database_connection對象。對于該函數(shù)還有一點(diǎn)也需要額外說明,我們沒有必要為了訪問多個數(shù)據(jù)庫而創(chuàng)建多個數(shù)據(jù)庫連接對象,因?yàn)橥ㄟ^SQLite自帶的ATTACH命令可以在一個連接中方便的訪問多個數(shù)據(jù)庫。
       
    2). sqlite3_prepare
    該函數(shù)將SQL文本轉(zhuǎn)換為prepared_statement對象,并在函數(shù)執(zhí)行后返回該對象的指針。事實(shí)上,該函數(shù)并不會評估參數(shù)指定SQL語句,它僅僅是將SQL文本初始化為待執(zhí)行的狀態(tài)。最后需要指出的,對于新的應(yīng)用程序我們可以使用sqlite3_prepare_v2接口函數(shù)來替代該函數(shù)以完成相同的工作。
   
    3). sqlite3_step
    該函數(shù)用于評估sqlite3_prepare函數(shù)返回的prepared_statement對象,在執(zhí)行完該函數(shù)之后,prepared_statement對象的內(nèi)部指針將指向其返回的結(jié)果集的第一行。如果打算進(jìn)一步迭代其后的數(shù)據(jù)行,就需要不斷的調(diào)用該函數(shù),直到所有的數(shù)據(jù)行都遍歷完畢。然而對于INSERT、UPDATE和DELETE等DML語句,該函數(shù)執(zhí)行一次即可完成。
   
    4). sqlite3_column
    該函數(shù)用于獲取當(dāng)前行指定列的數(shù)據(jù),然而嚴(yán)格意義上講,此函數(shù)在SQLite的接口函數(shù)中并不存在,而是由一組相關(guān)的接口函數(shù)來完成該功能,其中每個函數(shù)都返回不同類型的數(shù)據(jù),如:
 復(fù)制代碼 代碼如下:
    sqlite3_column_blob
    sqlite3_column_bytes
    sqlite3_column_bytes16
    sqlite3_column_double
    sqlite3_column_int
    sqlite3_column_int64
    sqlite3_column_text
    sqlite3_column_text16
    sqlite3_column_type
    sqlite3_column_value
    sqlite3_column_count
 
    其中sqlite3_column_count函數(shù)用于獲取當(dāng)前結(jié)果集中的字段數(shù)據(jù)。下面是使用sqlite3_step和sqlite3_column函數(shù)迭代結(jié)果集中每行數(shù)據(jù)的偽代碼,注意這里作為示例代碼簡化了對字段類型的判斷:
復(fù)制代碼 代碼如下:
     int fieldCount = sqlite3_column_count(...);
     while (sqlite3_step(...) <> EOF) {
         for (int i = 0; i < fieldCount; ++i) {
             int v = sqlite3_column_int(...,i);
         }
     }

    5). sqlite3_finalize
    該函數(shù)用于銷毀prepared statement對象,否則將會造成內(nèi)存泄露。
   
    6). sqlite3_close
    該函數(shù)用于關(guān)閉之前打開的database_connection對象,其中所有和該對象相關(guān)的prepared_statements對象都必須在此之前先被銷毀。

三、參數(shù)綁定:

    和大多數(shù)關(guān)系型數(shù)據(jù)庫一樣,SQLite的SQL文本也支持變量綁定,以便減少SQL語句被動態(tài)解析的次數(shù),從而提高數(shù)據(jù)查詢和數(shù)據(jù)操作的效率。要完成該操作,我們需要使用SQLite提供的另外兩個接口APIs,sqlite3_reset和sqlite3_bind。見如下示例:

復(fù)制代碼 代碼如下:
void test_parameter_binding() {
        //1. 不帶參數(shù)綁定的情況下插入多條數(shù)據(jù)。
        char strSQL[128];
        for (int i = 0; i < MAX_ROWS; ++i) {
            sprintf(strSQL,"insert into testtable values(%d)",i);
            sqlite3_prepare_v2(..., strSQL);
            sqlite3_step(prepared_stmt);
            sqlite3_finalize(prepared_stmt);
        }
        //2. 參數(shù)綁定的情況下插入多條數(shù)據(jù)。
        string strSQLWithParameter = "insert into testtable values(?)";
        sqlite3_prepare_v2(..., strSQL);
        for (int i = 0; i < MAX_ROWS; ++i) {
            sqlite3_bind(...,i);
            sqlite3_step(prepared_stmt);
            sqlite3_reset(prepared_stmt);
        }
        sqlite3_finalize(prepared_stmt);
    }

這里首先需要說明的是,SQL語句"insert into testtable values(?)"中的問號(?)表示參數(shù)變量的占位符,該規(guī)則在很多關(guān)系型數(shù)據(jù)庫中都是一致的,因此這對于數(shù)據(jù)庫移植操作還是比較方便的。

    通過上面的示例代碼可以顯而易見的看出,參數(shù)綁定寫法的執(zhí)行效率要高于每次生成不同的SQL語句的寫法,即2)在效率上要明顯優(yōu)于1),下面是針對這兩種寫法的具體比較:

    1). 單單從程序表面來看,前者在for循環(huán)中執(zhí)行了更多的任務(wù),比如字符串的填充、SQL語句的prepare,以及prepared_statement對象的釋放。
    2). 在SQLite的官方文檔中明確的指出,sqlite3_prepare_v2的執(zhí)行效率往往要低于sqlite3_step的效率。
    3). 當(dāng)插入的數(shù)據(jù)量較大時,后者帶來的效率提升還是相當(dāng)可觀的。

標(biāo)簽: SQLite
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产日韩欧美一区二区三区| 久久电影一区| 欧美日韩视频免费看| 亚洲欧洲美洲国产香蕉| 亚洲精品福利| 日韩高清不卡一区| 蜜桃久久久久久久| 亚洲免费福利一区| 久久国产三级精品| 欧美aⅴ一区二区三区视频| 久久只有精品| 成人在线超碰| 999久久久亚洲| 在线综合亚洲| 一区二区三区午夜视频| 日本精品一区二区三区在线观看视频| 欧美日韩 国产精品| 久久久久黄色| 日韩中文在线播放| 丝袜美腿亚洲色图| 久久国产欧美日韩精品| 国产高清亚洲| 成人三级高清视频在线看| 欧美日韩精品免费观看视完整| 婷婷成人综合| 亚洲三级网址| 国产精品4hu.www| 国产中文在线播放| 在线日韩av| 日本久久二区| a天堂资源在线| 中文在线不卡| 国产精品视频一区二区三区四蜜臂 | 国产精品多人| 超碰在线99| 亚洲欧美视频| 久久精品一区二区国产| 婷婷综合激情| 7m精品国产导航在线| 动漫av一区| 亚洲一区二区三区四区五区午夜 | а√天堂8资源中文在线| 国产字幕视频一区二区| 蜜桃av一区二区| 精品一区二区三区在线观看视频| 激情婷婷久久| 欧美精品97| 黄色免费成人| 麻豆91小视频| 国产精品美女久久久| 精品视频国产| 亚洲一区av| 91精品韩国| 一区二区高清| 亚洲免费中文| 久久精品午夜| 日韩成人精品一区| 亚洲欧美日韩在线观看a三区| 高清一区二区三区| 卡一精品卡二卡三网站乱码| 九九九精品视频| 久久精品国产久精国产| 欧美国产小视频| 精品国产亚洲日本| 九一国产精品| 欧美日韩中出| 亚洲天堂资源| 欧美女激情福利| 热久久免费视频| 你懂的国产精品| 香蕉视频亚洲一级| 亚洲www啪成人一区二区| 久久国产生活片100| 国产欧美日韩一区二区三区在线| se01亚洲视频 | 另类国产ts人妖高潮视频| 免费看久久久| 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲啊v在线| 久久精品av麻豆的观看方式| 亚洲精品一二三区区别| 国产中文在线播放| 久久国产精品色av免费看| 日韩综合一区| 久久精品三级| 亚洲一级少妇| 欧美韩日一区| 伊人久久大香线蕉av不卡| 丝袜美腿一区| 老司机精品久久| 一区二区三区四区日韩| 在线亚洲精品| 欧美亚洲福利| 激情五月色综合国产精品| 精品国产日韩欧美精品国产欧美日韩一区二区三区 | 欧美专区一区| 蜜桃传媒麻豆第一区在线观看| 精品亚洲美女网站| 精品三级久久久| 欧美激情在线精品一区二区三区| 日韩视频1区| 亚洲精品少妇| 一二三区精品| 免费一区二区视频| 亚洲欧美网站| 久久亚洲二区| 欧美日韩精品免费观看视频完整| 欧美日本不卡高清| 最新国产精品| 亚洲尤物av| 蜜桃伊人久久| 国产精品外国| 99视频精品| 9色国产精品| 欧美午夜不卡| 欧美一区二区三区高清视频| 久久久9色精品国产一区二区三区| 黑森林国产精品av| 天堂中文av在线资源库| 不卡专区在线| 久久男人av资源站| 精品成av人一区二区三区 | 精品一区二区三区四区五区| 国产情侣久久| 国产精品传媒麻豆hd| 久久xxx视频| 国产精品手机在线播放| 国产乱论精品| 美女精品一区二区| 精品视频网站| 九九精品调教| 久久久久久黄| 久久精品国产亚洲夜色av网站| 青青久久av| 99成人在线视频| 黄色日韩精品| 中文字幕亚洲精品乱码| 久久午夜精品一区二区| 美女毛片一区二区三区四区| 精品亚洲成人| 精品理论电影在线| 六月婷婷综合| 99久久婷婷| 亚洲欧美视频一区二区三区| 玖玖精品视频| 欧美精品三级在线| 麻豆精品在线观看| 中文字幕在线免费观看视频| 久久香蕉国产| 午夜久久免费观看| 亚洲精品欧美| 麻豆一区在线| 亚洲福利国产| 日本不卡一区二区三区| 欧美国产另类| 桃色一区二区| 美国欧美日韩国产在线播放| 日韩av网站在线观看| 精品免费在线| 在线精品小视频| 亚洲人成亚洲精品| 五月激情久久| 中文字幕亚洲精品乱码| 国产精品qvod| 久久久精品午夜少妇| 中文字幕成人| 成人一二三区| 久热综合在线亚洲精品| 欧美激情视频一区二区三区在线播放| 日本综合字幕| 一区二区三区午夜视频| 韩国一区二区三区视频| 99成人在线| 国产精品久久久久久久久久白浆| 国产a久久精品一区二区三区| 免费观看不卡av| 国产精品久久免费视频| 蜜桃精品在线| 一二三区精品| 国产中文字幕一区二区三区| 欧美特黄一区| 欧美精品成人| 亚洲激情精品| 美女性感视频久久| 久久99伊人| 久久国产精品美女| 国产亚洲激情| 国产精品不卡| 免费成人av在线播放| 精品国内亚洲2022精品成人 | 亚洲国产福利| 四虎精品一区二区免费| 91免费精品| 视频一区视频二区中文字幕| 国产一区二区精品福利地址| 欧美特黄一级| 国语精品一区| 日韩高清在线不卡| 一区在线观看| 精品丝袜久久|