C/C++下使用SQLite輕量級數據庫


 
一、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;  
}  

 

 記在這里,學習啊!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM