C 操作SQLite簡明教程

2021-07-02 02:17:42 字數 3068 閱讀 1937

sqlite是一款輕型的本地檔案資料庫,是遵守acid的關聯式資料庫管理系統。它的設計目標是嵌入式的,而且目前已經在很多嵌入式產品中使用了它,它的功能強、速度快,它占用資源非常的低,在嵌入式裝置中,可能只需要幾百k的記憶體就夠了。它能夠支援windows/linux/unix等主流的作業系統,同時能夠跟很多程式語言相結合。

一、sqlite的資料型別

在進行資料庫操作之前,有個問題需要說明,就是sqlite的資料型別,和其他的資料庫不同,sqlite支援的資料型別有他自己的特色:typelessness(無型別)。 sqlite是無型別的,這意味著你可以儲存任何型別的資料到你所想要儲存的任何表的任何列中, 無論這列宣告的資料型別是什麼。

而大多數的資料庫在資料型別上都有嚴格的限制,在建立表的時候,每一列都必須制定乙個資料型別,只有符合該資料型別的資料可以被儲存在這一列當中。而在sqlite 2.x中,資料型別這個屬性只屬於資料本生,而不和資料被存在哪一列有關,也就是說資料的型別並不受資料列限制(有乙個例外:integer primary key,該列只能存整型資料)。

但是當sqlite進入到3.0版本的時候,這個問題似乎又有了新的答案,sqlite的開發者開始限制這種無型別的使用,在3.0版本當中,每一列開始擁有自己的型別,並且在資料存入該列的時候,資料庫會試圖把資料的型別向該型別轉換,然後以轉換之後的型別儲存。當然,如果轉換被認為是不可行的,sqlite仍然會儲存這個資料,就像他的前任版本一樣。

舉個例子,如果你企圖向乙個integer型別的列中插入乙個字串,sqlite會檢查這個字串是否有整型資料的特徵, 如果有而且可以被資料庫所識別,那麼該字串會被轉換成整型再儲存,如果不行,則還是作為字串儲存。

誠然sqlite允許忽略資料型別, 但是仍然建議在你的create table語句中指定資料型別. 因為資料型別對於你和其他的程式設計師交流, 或者你準備換掉你的資料庫引擎時能起到乙個提示或幫助的作用. sqlite支援常見的資料型別, 如:

1.null,值是null

2.integer,值是有符號整形,根據值的大小以1,2,3,4,6或8位元組存放

3.real,值是浮點型值,以8位元組ieee浮點數存放

4.text,值是文字字串,使用資料庫編碼(utf-8,utf-16be或者utf-16le)

5.blob,只是乙個資料塊,完全按照輸入存放(即沒有準換)

sqlite的操作介面

sqlite的2個重要結構體:

sqlite3 *pdb,資料庫控制代碼,跟檔案控制代碼file很類似

sqlite3_stmt *stmt,這個相當於odbc的command物件,用於儲存編譯好的sql語句

sqlite的5個主要的函式:

sqlite3_open(), 開啟資料庫

sqlite3_exec(),執行非查詢的sql語句

sqlite3_prepare(),準備sql語句,執行select語句或者要使用parameter bind時,用這個函式(封裝了sqlite3_exec).

sqlite3_step(),在呼叫sqlite3_prepare後,使用這個函式在記錄集中移動。

sqlite3_close(),關閉資料庫檔案

還有一系列的函式,用於從記錄集欄位中獲取資料,如:

sqlite3_column_text(),取text型別的資料

sqlite3_column_blob(),取blob型別的資料

sqlite3_column_int(),取int型別的資料

c++使用前準備

但是sqlite-dll-win32-x86-3071700.zip中並沒有提供sqlite的lib檔案,需要自己編譯生成。解壓sqlite-dll-win32-x86-3071700.zip到sqlite-dll-win32-x86-3071700目錄,再將vs安裝目錄下vc中的lib.exe、link.exe、mspdb80.dll(這裡用的是vs2008)拷貝到sqlite-dll-win32-x86-3071700,執行lib.exe /def:sqlite3.def /machine:ix86 就可以得到sqlite3.lib檔案。

c++訪問sqlite

c++對sqlite進行操作的**如下:

複製**

**如下:

#include "stdafx.h"

#include

using namespace std;

#include "sqlite3.h"

#pragma comment(lib, "sqlite3.lib")

static int selectcallback(void *notused, int argc, char **argv, char **azcolname)

}printf("\n");

return 0;

}int _tmain(int argc, _tchar* argv)

// 建立表

string strsql= "create table test (id int, name text);";

res = sqlite3_exec(pdb , strsql.c_str() ,0 ,0, &errmsg);

if (res != sqlite_ok)

// 插入資料

res = sqlite3_exec(pdb,"begin transaction;",0,0, &errmsg);

for (int i= 1; i < 10; ++i)

}res = sqlite3_exec(pdb,"commit transaction;",0,0, &errmsg);

// 查詢資料

strsql= "select * from test;";

res = sqlite3_exec(pdb, strsql.c_str(), selectcallback, 0 , &errmsg);

if (res != sqlite_ok)

// 關閉資料庫

sqlite3_close(pdb);

return 0;}

sqlite 操作簡明教程

sqlite顧名思議是以 sql為基礎的資料庫軟體,sql是一套強大的資料庫語言,主要概念是由 資料庫 資料表 table 查詢指令 queries 等單元組 成的 關聯性資料庫 進一步的概念可參考網路上各種關於sql及關聯性資料庫的檔案 因為sql的查詢功能強大,語法一致而入門容易,因此成為現今主...

sqlite 操作簡明教程

sqlite顧名思議是以 sql為基礎的資料庫軟體,sql是一套強大的資料庫語言,主要概念是由 資料庫 資料表 table 查詢指令 queries 等單元組 成的 關聯性資料庫 進一步的概念可參考網路上各種關於sql及關聯性資料庫的檔案 因為sql的查詢功能強大,語法一致而入門容易,因此成為現今主...

sqlite簡明教程

本文的主要目的是作為乙個入門級教程,教你一些如何使用pysqlite來操作 sqite 的一些基本的語句,更詳細的還要去參考想應的文件以及編寫相應的測試程式。希望本文對你有幫助。我以前的blog sqlite乙個輕巧的資料庫 一 安裝 二 建立資料庫 開啟資料庫 sqlite使用檔案作為資料庫,你可...