一、SQLite
SQLite,是一款輕型的數據庫,是遵守ACID的關聯式數據庫管理系統,它的設計目標是嵌入式的,而且目前已經在很多嵌入式產品中使用了它,它占用資源非常的低,在嵌入式設備中,可能只需要幾百K的內存就夠了。它能夠支持Windows/Linux/Unix等等主流的操作系統,同時能夠跟很多程序語言相結合,還有ODBC接口,同樣比起Mysql、PostgreSQL這兩款開源世界著名的數據庫管理系統來講,它的處理速度比他們都快。SQLite
也被用於很多軟件,打開飛信的安裝目錄,就能看見 SQLite ,估計是被用來存儲聊天記錄的。
二、下載SQLite
我下的版本為sqlite-amalgamation-3071400.zip,這個包含了主要的源代碼。sqlite-dll-win32-x86-3071400.zip這個是Windows下的編譯好的DLL文件和def文件,解壓縮后包含兩個文件,sqlite3.def和sqlite3.dll。
編譯源代碼很簡單,新建立一個C++空項目,把sqlite-amalgamation-3071400.zip解壓縮后的文件拷進去,編譯、鏈接,就行了。我的目的是把sqlite數據庫作為自己項目中的一部分,是作為嵌入的一部分使用的。這個要利用到sqlite3.dll文件。可是源文件只有sqlite3.def和sqlite3.dll沒有sqlite3.lib文件,怎么用呢?根據def文件可以生成對應的LIB文件。以下是命令行生成LIB文件。找到VS的安裝路徑,我的是D:\Program
Files\,用命令行進入以下路徑。
D:\Program Files\Microsoft Visual Studio 9.0\VC\bin>lib /def:sqlite3.def /machine:ix86
三、使用
View Code
//[cpp] view plaincopyprint? //#pragma comment(lib,"sqlite3.lib") #include <iostream> #include <string> #include <sstream> #include "sqlite3.h" using namespace std; sqlite3* pDB; static int callback(void *NotUsed, int argc, char **argv, char **azColName) { int i =0; std::cout<< azColName[i] << " = "<< (argv[i] ? argv[i] : "NULL")<< ", " ; std::cout<< "\n"; return 0; } int main() { int res = sqlite3_open("mydatabase.db", &pDB); if( res ){ std::cout << "Can't open database: "<< sqlite3_errmsg(pDB); sqlite3_close(pDB); return -1; } char* errMsg; string dropTab="drop table test;"; string createStrSQL= "create table test(one int, two long);"; int res; res = sqlite3_exec(pDB,dropTab.c_str(),0,0, &errMsg); if (res != SQLITE_OK) { std::cout << "執行SQL出錯." << errMsg << std::endl; return -1; } res = sqlite3_exec(pDB,createStrSQL.c_str(),0,0, &errMsg); if (res != SQLITE_OK) { std::cout << "執行創建table的SQL出錯." << errMsg << std::endl; return -1; } else std::cout << "創建table的SQL成功執行."<< std::endl; for (int i= 1; i < 10; ++i) { stringstream strsql; strsql << "insert into test values("; strsql << i << ","<< (i+10) << ");"; std::string str = strsql.str(); res = sqlite3_exec(pDB,str.c_str(),0,0, &errMsg); if (res != SQLITE_OK) { std::cout << "執行SQL出錯." << errMsg << std::endl; return -1; } } string strSQL= "select * from test;"; int res = sqlite3_exec(pDB,strSQL.c_str(),callback,0, &errMsg); if (res != SQLITE_OK) { std::cout << "執行SQL出錯." << errMsg << std::endl; return -1; } else std::cout << "SQL成功執行."<< std::endl; return 0; }
記在這里,學習啊!
