標籤:des style blog color 使用 os io 檔案
<一,>1,安裝 for centos/ReaHat;
yum -y install sqlite sqlite-devel;
2,sqlite C/C++API介面,核心對象
OCI介面(Oracle Call Interface)
2_1,核心對象:database_connection和prepared_statement;
database_connection對象是由sqlite3_open()介面函數建立並返回的,在應用程式使用任何其他SQLite介面函數前,必須先調用該函數以便獲得database_connection對象,後面的其他APIs調用中,都需要database_connection對象作為輸入參數以完成相應的工作,prepared_statement,可將其視為編譯好的SQL語句,所有SQL語句執行相關的函數都需要改對象作為輸入參數以完成指定的SQL操作.
2_2,核心介面01)
sqlite3_open 操作SQLite資料庫的入口函數,該函數返回的database_connection對象是很多其他SQLite APIs的控制代碼參數,我們可以通過該函數即可以開啟已經存在 的資料庫檔案,也可以建立新的資料庫檔案,該函數返回的database_connection對象,我們可以在多個線程之間共用該對象的指標,以便完成和資料庫相關的任意操作,為訪問多個資料庫而建立多個資料庫連接對象,因為通過SQLite內建的ATTACH命令可以在一個串連中方便的訪問多個資料庫;
2),sqlite3_prepar
該函數將SQL文本轉換為prepared_statement對象,斌在函數執行後返回該對象指標,該函數不會評估參數指定SQL語句,它僅僅是將SQL文本初始化為待執行的狀態,sqlite3_prepare_v2等同;
3),sqlite_step
函數用於評估sqlite3_prepare函數返回的prepared_statement對象,在執行完該函數之後,prepared_statement對象的內部指標將指向其返回的結果集的第一行;迭代其後的資料行,則需要不斷的調用該函數,直到遍曆完資料行,對於insert,update和delete等DML語句,sqlite_step一次即可完成;
4),sqlite3_column _....
函數用於擷取當前行指定列的資料,
sqlite3_column_blob,bytes,bytes16,double,int,int64,text,text16,type,value,count;
其中sqlite3_column_count函數用於擷取當前結果集中的欄位資料
案例偽碼,
使用sqlite3_step和sqlite_column函數迭代結果集中每行資料
int fieldCount = sqlite3_column_count();
while (sqlite3_step()<>EOF)
{
for (int i = 0;i < fieldCount;i++)
{
int v = sqlite3_column_int();
}
}
5),sqlite3_finalize
函數用於銷毀prepared_statement對象,否則會造成記憶體泄露
6),sqlite3_close
函數用於關閉之前開啟的database_connection對象,其中所有和該對象相關的prepared_statement對象都必須在此之前銷毀;
3,參數變數綁定;
SQLite的SQL文本也支援變數綁定,以減少SQL語句被動態解析的次數,有利於提高資料查詢和操作效率,要完成該操作,還需要SQLite提供的另外2個介面,sqlite3_reset和sqlite3_bind;
1 void test_parameter_binding() { 2 //1. 不帶參數綁定的情況下插入多條資料, 3 char strSQL[128]; 4 for (int i = 0;i < MAX_ROWS;++i) 5 { 6 sprintf(strSQL,"insert into testtable values(%d)",i); 7 sqlite3_prepare_v2(...,strSQL); 8 sqlite3_step(prepared_statement); 9 sqlite3_finalize(prepared_statement);10 }11 //2,參數綁定情況下插入多條資料12 string strSQLWithParameter = "insert into testtable values(?)";13 sqlite3_prepare_v2(...,strSQL);14 for (int i = 0;i < MAX_ROWS;++i)15 {16 sqlite3_bind();17 sqlite3_step();18 sqlite3_reset();19 }20 sqlite3_finalize();21 22 }
<二,>資料庫,表CLI語句;
在指定資料庫建立表;
用attach database ‘資料庫檔案路徑,可以存在或是建立‘ as 資料庫名,同前面的資料庫檔案名一樣;
在在其建立表時,仍然需要指定此資料庫的名稱,不然SQL建立的資料表將會被建立到我們sqlite3 資料庫名稱的資料庫中;
簡單Database Backup恢複