亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時(shí)間:2015年05月04日 15:57:29   投稿:junjie  
這篇文章主要介紹了SQLite教程(二):C/C++接口簡(jiǎn)介,本文講解了C/C++接口概述、核心對(duì)象和接口、參數(shù)綁定等內(nèi)容,需要的朋友可以參考下

一、概述:

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

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

三、參數(shù)綁定:

    和大多數(shù)關(guān)系型數(shù)據(jù)庫(kù)一樣,SQLite的SQL文本也支持變量綁定,以便減少SQL語句被動(dòng)態(tài)解析的次數(shù),從而提高數(shù)據(jù)查詢和數(shù)據(jù)操作的效率。要完成該操作,我們需要使用SQLite提供的另外兩個(gè)接口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(?)"中的問號(hào)(?)表示參數(shù)變量的占位符,該規(guī)則在很多關(guān)系型數(shù)據(jù)庫(kù)中都是一致的,因此這對(duì)于數(shù)據(jù)庫(kù)移植操作還是比較方便的。

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

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

相關(guān)文章

  • SQLite教程(八):命令行工具介紹

    SQLite教程(八):命令行工具介紹

    這篇文章主要介紹了SQLite教程(八):命令行工具介紹,本文羅列了所有內(nèi)置命令,并對(duì)命令作用做了說明,然后給出了常用示例,需要的朋友可以參考下
    2015-05-05
  • sQlite常用語句以及sQlite developer的使用與注冊(cè)

    sQlite常用語句以及sQlite developer的使用與注冊(cè)

    sQlite數(shù)據(jù)庫(kù)對(duì)大家來說應(yīng)該都不陌生,下面這篇文章主要給大家介紹了關(guān)于sQlite常用語句以及sQlite developer使用與注冊(cè)的相關(guān)資料,文中通過示例代碼與圖片給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,下面來一起看看吧。
    2017-10-10
  • Sqlite 操作類代碼

    Sqlite 操作類代碼

    這兩天用了用SQLite,感覺比SQL CE好用多了,最主要的是性能好多了.這一點(diǎn)對(duì)手持設(shè)備來講很重要.閑話少說,下來將怎么在WM用.NET CF訪問SQLite.
    2009-11-11
  • SQLite中重置自動(dòng)編號(hào)列的方法

    SQLite中重置自動(dòng)編號(hào)列的方法

    這篇文章主要介紹了SQLite中重置自動(dòng)編號(hào)列的方法,本文講解了3種情況和其對(duì)應(yīng)解決方法,需要的朋友可以參考下
    2015-03-03
  • SQLite教程(二):C/C++接口簡(jiǎn)介

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

    這篇文章主要介紹了SQLite教程(二):C/C++接口簡(jiǎn)介,本文講解了C/C++接口概述、核心對(duì)象和接口、參數(shù)綁定等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • VScode第三方插件打開sqlite數(shù)據(jù)庫(kù)圖文教程

    VScode第三方插件打開sqlite數(shù)據(jù)庫(kù)圖文教程

    在實(shí)際做一個(gè)項(xiàng)目的時(shí)候,為了提高效率我們會(huì)首選不重復(fù)造輪子,所以可能會(huì)用到第三方庫(kù),下面這篇文章主要給大家介紹了關(guān)于VScode第三方插件打開sqlite數(shù)據(jù)庫(kù)的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • SQLite 入門教程四  增刪改查 有講究

    SQLite 入門教程四 增刪改查 有講究

    增刪改查操作,其中增刪改操作被稱為數(shù)據(jù)操作語言 DML,相對(duì)來說簡(jiǎn)單一點(diǎn)。 查操作相對(duì)來說復(fù)雜一點(diǎn),涉及到很多子句,所以這篇先講增刪改操作,以例子為主,后面再講查操作
    2013-12-12
  • 初識(shí)SQLITE3數(shù)據(jù)庫(kù)

    初識(shí)SQLITE3數(shù)據(jù)庫(kù)

    本文主要講訴Sqlite數(shù)據(jù)庫(kù)的一些基本概念以及SQLite的優(yōu)勢(shì),需要的朋友可以參考下
    2014-08-08
  • SQLite3 API 編程手冊(cè)

    SQLite3 API 編程手冊(cè)

    Sqlite3 的確很好用。小巧、速度快。但是因?yàn)榉俏④浀漠a(chǎn)品,幫助文檔總覺得不夠。這些天再次研究它,又有一些收獲,這里把我對(duì) sqlite3 的研究列出來,以備忘記
    2013-12-12
  • SQLite學(xué)習(xí)手冊(cè)(SQLite在線備份)

    SQLite學(xué)習(xí)手冊(cè)(SQLite在線備份)

    在SQLite中提供了一組用于在線數(shù)據(jù)庫(kù)備份的APIs函數(shù)(C接口),可以很好的解決上述方法存在的不足。通過該組函數(shù),可以將源數(shù)據(jù)庫(kù)中的內(nèi)容拷貝到另一個(gè)數(shù)據(jù)庫(kù),同時(shí)覆蓋目標(biāo)數(shù)據(jù)庫(kù)中的數(shù)據(jù)
    2013-12-12

最新評(píng)論