配置:
一、SQLite3 簡介
SQLite3 是一個開源免費的嵌入式關係數據庫,它在 2000 年由 D. Richard Hipp 發佈,它不像大型數據庫管理系統,佔用系統大量資源。SQLite3 是用 C 語言編寫的開源數據庫,可移植性好,容易使用、輕型、高效、可靠,主要用在嵌入式系統中,由於其便利性,目前很多桌面程序也使用了 SQLite3,如:360 殺毒,金山毒霸等。SQLite3 基本支持 SQL92 標準。如:索引、限制、觸發和查看支持。支持 NULL、INTEGER、REAL、TEXT、BLOB 數據類型,支持事物。
二、使用版本
本文使用的 SQLite3 版本爲:3.6.23.1
下載地址:http://www.sqlite.org/download.html
在使用中,一般下載兩個壓縮包即可:sqlite-amalgamation-3_6_23_1.zip、sqlitedll-3_6_23_1.zip
三、配置
在 Windows 中,使用第三方庫有很多種方式,大多數軟件使用動態 dll、使用靜態導入庫、使用靜態鏈接庫。由於下載的壓縮包中,本來就有 sqlite3.dll 文件,使用起來也十分方便,所以本文主要講解後面兩種方式的配置。
1、使用靜態導入庫
靜態導入庫也稱爲輸入庫,是目標庫文件的一種特殊形式。像目標庫一樣,輸入庫有 .lib 擴展名,並且被鏈接程序用來確定源程序代碼中的函數調用。導入庫不含代碼,而是爲連接程序提供信息,以便在 .exe 文件中建立動態鏈接時要用到的重定位表。
在下載的壓縮包中,沒有導入庫,所以我們需要自己編譯,編譯過程如下:
1、 將壓縮包 sqlitedll-3_6_23_1.zip 解壓到一個目錄。
2、 拷貝 VS2005 中 lib.exe、link.exe、mspdb80.dll 到剛纔解壓的目錄。VS2005 中文件的路徑爲:C:/Program Files/Microsoft Visual Studio 8/VC/bin、C:/Program Files/Microsoft Visual Studio 8/VC/bin
3、 打開 CMD 窗口,切換到對應的目錄,輸入:LIB /DEF:sqlite3.def /machine:IX86
編譯之後,便會在本地目錄中產生 sqlite3.lib 導入庫文件,將此庫鏈接入程序,另一個壓縮包中有 sqlite3.h 頭文件,這兩個文件配合使用,如果本地有 sqlite3.dll ,便可以通過靜態導入庫來使用 SQLite3 了。
2、使用靜態鏈接庫
靜態鏈接庫也稱爲目標庫,是帶 .lib 擴展名的文件。在用鏈接程序進行靜態鏈接時,它的代碼就會加到程序的 .exe 文件中。
下載的安裝包中,也不存在靜態鏈接庫,所以我們也需要自己編譯,編譯過程如下:
1、 用 VS2005 建立一個名爲 sqlite3 的靜態鏈接庫工程。
2、 將壓縮包中的文件 sqlite3.c、sqlite3.h 添加入工程,將輸出文件名改爲 sqlite3.lib,編譯。
編譯之後,便會在設置的目錄中產生 sqlite3.lib 靜態鏈接庫,通過本 lib 文件與 sqlite3.h 文件,便可以使用 SQLite3 了,此處可以看到,使用時並不需要 sqlite3.dll 文件。
注:VS2005 默認的編譯模式爲“/MD”,如果要完全不依賴於其他dll,可以設置爲“/MT”。
四、查看數據庫
SQLite 官網有查看的工具,使用後感覺不方便,也不友好。在此推薦一個工具 SQLiteSpy,提供圖形界面方式查看 SQLite3 數據庫,操作方式十分簡單,只要見 SQLite 數據庫文件直接打開即可,想必您一定會用。
下載地址:http://www.yunqa.de/delphi/sqlitespy/
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/xt_xiaotian/archive/2010/04/06/5453686.aspx
基本導出函數
一、概述
SQLite3 的最常使用基本導出函數有五個:
sqlite3_open:打開(鏈接到) SQLite3 數據庫。
sqlite3_close:關閉 SQLite3 數據庫連接。
sqlite3_exec:對於已打開的數據庫連接,執行 SQL 語句。
sqlite3_get_table:對於已打開的數據庫連接,查詢數據庫。
sqlite3_free:釋放 SQLite 內部分配的內存。
二、使用
SQLite3 使用非常簡單,像 Windows 大部分 API 一樣,先打開對應的資源,獲得句柄,然後對資源進行操縱,最後關閉句柄。
下面的代碼演示其過程(代碼中含有大量註釋,具體函數調用過程可看註釋):
#include "stdafx.h"
#include "sqlite3.h"
#include <windows.h>
#pragma comment(lib, "sqlite3.lib")
void PrintInfo(LPCSTR* pPrintInfo, int nRows, int nCols)
{
LPCSTR lpszTemp = NULL;
for (int nRowIndex = 0; nRowIndex <= nRows; nRowIndex++) // nRowIndex = 0 時,查找到的是表頭
{
for (int nColIndex = 0; nColIndex < nCols; nColIndex++)
{
lpszTemp = *(pPrintInfo + nRowIndex * nCols + nColIndex); // 信息是直接累加的,前面是表頭
if (lpszTemp)
{
printf(lpszTemp);
printf("/n");
}
}
printf("---------------------------------------/n");
}
printf("=======================================================/n");
}
void main()
{
sqlite3* pSQLite = NULL;
int nRet = 0;
LPCSTR lpszSQL1 = "create table people(name varchar(20), age int, birthday datetime);"; // 創建表格people 的SQL 語句
LPCSTR lpszSQL2 = "insert into people values('wang',20,'1990-6-3');"; // 插入信息的SQL 語句
LPCSTR lpszSQL3 = "insert into people values('li',21,'1989-3-2');";
LPCSTR lpszSQL4 = "select * from people;"; // 查找表格people 的所有信息的SQL 語句
LPCSTR lpszSQL5 = "delete from people where name='wang';"; // 刪除姓名爲"wang" 的信息
LPSTR* plpszResult = NULL;
int nRows = 0;
int nCols = 0;
nRet = sqlite3_open("C://SQLite3_Test.db", &pSQLite); // 鏈接到數據庫,如果成功,數據庫句柄指針存儲於pSQLite 中
if (nRet != SQLITE_OK) // 函數返回SQLITE_OK 表示連接成功,否則直接退出連接
goto Exit0;
nRet = sqlite3_exec(pSQLite, lpszSQL1, NULL, NULL, NULL); // 執行SQL 語句,創建people 表
if (nRet != SQLITE_OK)
goto Exit0;
nRet = sqlite3_exec(pSQLite, lpszSQL2, NULL, NULL, NULL); // 執行SQL 語句,將信息插入表格
if (nRet != SQLITE_OK)
goto Exit0;
nRet = sqlite3_exec(pSQLite, lpszSQL3, NULL, NULL, NULL);
if (nRet != SQLITE_OK)
goto Exit0;
nRet = sqlite3_get_table(pSQLite, lpszSQL4, &plpszResult, &nRows, &nCols, NULL); // 查詢表格中所有信息
if (nRet != SQLITE_OK)
goto Exit0;
PrintInfo((LPCSTR*)plpszResult, nRows, nCols); // 輸出查詢到的信息
nRet = sqlite3_exec(pSQLite, lpszSQL5, NULL, NULL, NULL); // 刪除姓名爲"wang" 的信息
if (nRet != SQLITE_OK)
goto Exit0;
nRet = sqlite3_get_table(pSQLite, lpszSQL4, &plpszResult, &nRows, &nCols, NULL);
if (nRet != SQLITE_OK)
goto Exit0;
PrintInfo((LPCSTR*)plpszResult, nRows, nCols); // 當刪除一項後,再打印出數據庫中的信息
Exit0:
if (plpszResult)
{
if (*plpszResult)
{
sqlite3_free(*plpszResult);
*plpszResult = NULL;
}
}
if (pSQLite)
{
sqlite3_close(pSQLite); // 關閉SQLite 數據庫連接
pSQLite = NULL;
}
DeleteFile("C://SQLite3_Test.db"); // 刪除用於測試的文件
return;
}
三、使用時的線程安全
在 Windows 中,SQLite3 是線程安全的,但使用時也必須遵守規定:一個 sqlite3 結構體指針,只能在一個線程中使用,如果需要將此 sqlite3 結構體傳遞給其他線程,則必須先複製一份,然後傳遞。
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/xt_xiaotian/archive/2010/04/06/5453696.aspx