程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C/C++下使用SQLite輕量級數據庫

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

編輯:C++入門知識

最近公司研發組研發一個產品使用了這個輕量級的數據庫,感覺的特別有趣,就初步看看。
一、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
 
三、使用
[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; 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved