一、 SQLite3数据库简介
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。(即SQLite3适用于比较轻量级的应用)
二、 使用SQLite3
1、 下载、编译sqlite文件。
下载网址:http://www.sqlite.org/download.html。
SQLite版本为SQLite 3.7.13,相关文件如下。
sqlite-dll-win32-x86-3071300.zip:包含sqlite3.def、sqlite3.dll文件。(用来生成sqlite3.lib)
sqlite-amalgamation-3071300.zip:包含sqlite3.h sqlite3.c 文件。(项目工程中需要包含sqlite3.h和sqlite3.c文件(切记))
sqlite-shell-win32-x86-3071300.zip:包含sqlite3.exe 文件。(sqlite3应用程序)
用Visual Studio xxxx command Prompt命令行程序编译sqlite3.def、sqlite3.dll生成sqlite3.lib(先把这两个文件copy到C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin,用里面的lib.exe编译:
lib /def:sqlite3.def /machine:ix86 即可生成sqlite3.lib和sqlite3.exp文件
2. 在C/C++项目中使用sqlite数据库的操作
前提条件:
a. 项目中link sqlite3.lib文件
b. 在项目源文件中加入sqlite3.c和sqlite3.h文件
c. #pragma comment(lib,"sqlite3.lib")
3. 示例代码如下:
#include <iostream>
#include <string>
#include <sstream>
#include "sqlite3.h"
using namespace std;
#pragma comment(lib,"sqlite3.lib")
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);";
res = sqlite3_exec(pDB, dropTab.c_str(), 0, 0, &errMsg); //运行SQL语句
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;";
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;
}
三、更多sqlite3的操作文档请直接看sqlite3.h/sqlite3.c。里面有非常详细的注释。
谢谢阅读。