sqlite與C++進行串連

來源:互聯網
上載者:User

標籤:sqlite3   sqlite   c++   sqlite與c++連結   第三方庫   

SQLite資料庫是零配置的,sqlite資料庫不同於SqlServer等資料庫,SQLite不需要複雜配置,只需要,將SQLite的庫檔案和動態連結檔案拷貝到相應工程目錄下,就可以使用SQLite資料庫,只是用到資料庫基本操作的同學們,建議選擇SQLite資料庫,為大家介紹一下使用SQLite資料庫API函數來實現一些基本操作。

Sqlite應用與嵌入式,應為小巧方便,而且沒有其他資料庫的複雜配置,我們在寫一些小程式或者對資料庫不是很複雜的操作的情況下,sqlite是不錯的選擇 。

我們使用sqlite時需要下下載它的壓縮包,網上有很多,

 

解壓後,我們可以看到存在 其中我們需要的sqlite3.h和sqlite3.lib以及sqlite3.dll三個檔案,接下來我們需要配置我們的編譯器(vc6.0或者VS,其步驟都一樣)

(1)首先,開啟VS編譯器,建立WIN32 控制台程式,F7編譯,運行(當然什麼都沒有,目的是得到debug檔案)



(2)然後我們把已經下載的SQLite3.h,SQLite3.lib拷貝到建立的TestSqlite目錄下。然後把sqlite3.h拷貝到debug目錄下。其實只要把這幾個檔案拷貝到程式的目錄下即可,到時候我們可以在include中加上路徑,同樣也能找到。

上面這種載入庫檔案的方法,有一定弊端(萬一我們要引用的檔案很多,都拷貝到程式目錄下,會很麻煩),第二種方法是使用VS2010編譯器所帶的功能:我們點擊“項目”->“屬性”-> 連結器,在附加元件封裝含目錄裡面添加我們所用到的庫檔案(lib)(輸入標頭檔或者包含檔案所在的檔案目錄),然後在附加庫目錄裡面添加我們用到的庫檔案的名字(庫檔案所在的檔案目錄)。注意添加的時候用逗號隔開(此時我們仍然要把動態連結檔案拷貝到程式目錄下),這樣我們就完成了庫檔案的載入。方法如下:

(3)




(4)附加元件封裝含目錄



(5)附加依賴項


以上使用第三方庫的方法請看如何使用第三方庫    http://blog.csdn.net/u014028070/article/details/42278007

  以上方法相當與我們把庫檔案包含進來,以便調用。然後我們在主程式的標頭檔中加入如下標頭檔(sqlite的API函數所在的標頭檔)。然後我們編譯下,檢查前面的操作是否正確。

 

 

此時我們在程式中使用sqliteAPI函數來操作資料庫。首先是建立資料庫,此時,我們定義一個sqlite操作控制代碼(以後的開啟,插入,執行等動作都是由控制代碼來執行的),然後定義一個字元指標,和數組,指標用來傳遞錯誤資訊,數組用來存放我們的sql語句。




sqlite3_open()函數用來開啟一個資料庫,若存在,則直接開啟,若不存在,則建立一個。



 

 

運行一下。

此時我們進入程式的目錄下,會發現多了一個尾碼名為db的檔案,這就是我們建立的資料庫,右鍵屬性,看到大小為0kb(因為裡面沒有插入資料)。





此時,我們進行插入資料操作,插入操作首先要建立資料所屬的屬性(關聯式資料庫的概念),我們在資料庫中增加三個屬性,分別是sno,sname,sex。分別是整形,動態字元型,字元型。

 

<span style="font-size:18px;">        sqlite3 * conn = NULL; char * err_msg = NULL;char sql[200] = ""  ;// 開啟資料庫, 建立串連if(sqlite3_open("student.db", &conn) != SQLITE_OK){cout<<"無法開啟!";}//建立表 student 建立表以後 不能重複建立  sprintf(sql, "CREATE TABLE student_for_table (sno int, sname varchar(20), age int)"); if (sqlite3_exec(conn, sql, NULL, NULL, &err_msg) != SQLITE_OK) { cout<<"操作失敗,錯誤碼: %s"<< err_msg; exit(-1); } </span>


 


然後我們執行插入操作。(這裡只是一個插入資料的示範)

<span style="font-size:18px;">int main(int argc, _TCHAR* argv[]){sqlite3 * conn = NULL; char * err_msg = NULL;char sql[200] = ""  ;// 開啟資料庫, 建立串連if(sqlite3_open("student.db", &conn) != SQLITE_OK){cout<<"無法開啟!";}//建立表 student 建立表以後 不能重複建立  sprintf(sql, "CREATE TABLE student_for_table (sno int, sname varchar(20), age int)"); if (sqlite3_exec(conn, sql, NULL, NULL, &err_msg) != SQLITE_OK) { cout<<"操作失敗,錯誤碼: %s"<< err_msg; exit(-1); }     //表建立完成,插入資料for (int i = 0; i < 10; i++){// 執行SQLsprintf(sql, "INSERT INTO student_for_table  (sno, sname, age) VALUES  (%d, '%s', %d)", i, "students", i);if (sqlite3_exec(conn, sql, NULL, NULL, &err_msg) != SQLITE_OK) {     cout<<"操作失敗,錯誤碼: %s"<< err_msg;     exit(-1); } }</span>
<span style="font-size:18px;">}</span>


 

然後執行,我們進入程式目錄,然後可以看出來資料庫的大小已經不是空了。





插入資料後,當然我們需要讀出來然後顯示,所以添加如下代碼。

 //把資料讀出來,進行顯示,sqlite3_exec()執行,調用回呼函數,顯示的操作寫在回填函數中

<span style="font-size:18px;">sprintf(sql, "SELECT * FROM student_for_table");sqlite3_exec(conn, sql, &sqlite3_exec_callback, 0, &err_msg);</span>



要讀出資料,我們要定義一個回呼函數:

<span style="font-size:18px;">//為了資料讀出來,使用回呼函數int sqlite3_exec_callback(void *data, int nColumn, char **colValues, char **colNames){for (int i = 0; i < 3; i++){printf("%s\t", colValues[i]);}printf("\n");return 0;}</span>



 以上最後的程式如下:

<span style="font-size:18px;">// TestSqlite.cpp : 定義控制台應用程式的進入點。//#include "stdafx.h"#include<iostream>#include"sqlite3.h"using namespace std;#pragma comment(lib,"sqlite3.lib")//為了資料讀出來,使用回呼函數int sqlite3_exec_callback(void *data, int nColumn, char **colValues, char **colNames){for (int i = 0; i < 3; i++){printf("%s\t", colValues[i]);}printf("\n");return 0;}int main(int argc, _TCHAR* argv[]){sqlite3 * conn = NULL; char * err_msg = NULL;char sql[200] = ""  ;// 開啟資料庫, 建立串連if(sqlite3_open("student.db", &conn) != SQLITE_OK){cout<<"無法開啟!";}//建立表 student 建立表以後 不能重複建立  sprintf(sql, "CREATE TABLE student_for_table (sno int, sname varchar(20), age int)"); if (sqlite3_exec(conn, sql, NULL, NULL, &err_msg) != SQLITE_OK) { cout<<"操作失敗,錯誤碼: %s"<< err_msg; exit(-1); }     //表建立完成,插入資料for (int i = 0; i < 10; i++){// 執行SQLsprintf(sql, "INSERT INTO student_for_table  (sno, sname, age) VALUES  (%d, '%s', %d)", i, "students", i);if (sqlite3_exec(conn, sql, NULL, NULL, &err_msg) != SQLITE_OK) {     cout<<"操作失敗,錯誤碼: %s"<< err_msg;     exit(-1); } }//把資料讀出來,進行顯示,sqlite3_exec()執行,調用回呼函數,顯示的操作寫在回填函數中sprintf(sql, "SELECT * FROM student_for_table");sqlite3_exec(conn, sql, &sqlite3_exec_callback, 0, &err_msg);//操作完資料庫後,一定要 關閉串連。if (sqlite3_close(conn) != SQLITE_OK){cout<<"無法關閉,錯誤碼: %s\n"<< sqlite3_errmsg(conn)<<endl;;exit(-1);}cout<<"操作成功"<<endl;return 0;}</span>

運行結果如下:

 

 

上面示範的是C++如何與sqlite串連,同時我們也可以將mfc與sqlite聯合起來使用,做出帶介面的操作,其核心的思想是一致的,只是把對sqlite資料庫的操作放在不同的響應函數中(mfc以訊息傳遞),比如我們把“開啟資料庫”操作放在一個button的響應函數中。這樣我們就可以做出帶有介面的資料庫操作程式。這僅是一些簡單的操作,要想做出一些有價值的東西,還需要更深的努力。

 

sqlite與C++進行串連

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.