標籤:
C++使用SQLite步驟及樣本
開發環境:Windows 10+VS2013。
開發語言:C++。
1、 下載sqlite檔案。
下載網址:http://www.sqlite.org/download.html。
SQLite版本為SQLite 3.11.1,相關檔案如下。
sqlite-dll-win32-x86-3110100.zip:包含sqlite3.def、sqlite3.dll檔案。
sqlite-amalgamation-3110100.zip:包含sqlite3.h 檔案。
sqlite-tools-win32-x86-3110100.zip:包含sqlite3.exe 檔。
2、 產生sqlite3.lib。
? sqlite-dll-win32-x86-3110100.zip檔案解壓到D:\ sqlite。
? 運行Visual Studio 2013 lib命令列程式。
? 依次執行控制台命令。
- cd D:\sqlite\sqlite-dll-win32-x86-3110100
- D:
- E:\Microsoft Visual Studio 12.0\VC\bin\lib.exe /def:sqlite3.def /machine:ix86
即可產生sqlite3.lib檔案。
3、 建立測試資料。
? sqlite-tools-win32-x86-3110100.zip檔案解壓到D:\ sqlite。
? 啟動命令列,進入D:\ sqlite目錄。
命令依次為:
- cd D:\sqlite
- d:
? 建立test.db測試檔案。
建立user表。
欄位Code |
欄位類型 |
欄位描述 |
id |
integer |
主鍵,自增 |
name |
varchar(64) |
使用者名稱 |
age |
integer |
年齡 |
建立命令依次如下。
- D:\sqlite>sqlite3.exe test.db
- SQLite version 3.7.13 2012-06-11 02:05:22
- Enter ".help" for instructions
- Enter SQL statements terminated with a ";"
- sqlite> create table user
- ...> (
- ...> id integer primary key autoincrement,
- ...> name varchar(64),
- ...> age integer
- ...> );
- sqlite> .quit
4、 建立樣本工程
? 建立win32控制台工程SQLiteTest。
? sqlite3.h(在sqlite-amalgamation-3071300.zip壓縮包中)添加到工程。
? sqlite3.lib複製到工程檔案夾下。
? 工程屬性中添加sqlite3.lib庫依賴。
Configuration Properties->Linker->Input->Additional Dependencies添加sqlite3.lib。
? 程式碼為:
[cpp] view plain copy
- /*
- @brief 本程式測試sqlite資料庫的增刪改查
- @date 2012-09-03
- */
- // SQLiteTest.cpp : Defines the entry point for the console application.
- //
-
- #include "stdafx.h"
- #include "sqlite3.h"
- #include <iostream>
- using namespace std;
-
- sqlite3 * pDB = NULL;
-
- //增加使用者
- bool AddUser(const string& sName, const string& sAge);
- //刪除使用者
- bool DeleteUser(const string& sName);
- //修改使用者
- bool ModifyUser(const string& sName, const string& sAge);
- //尋找使用者
- bool SelectUser();
-
- int _tmain(int argc, _TCHAR* argv[])
- {
- //開啟路徑採用utf-8編碼
- //如果路徑中包含中文,需要進行編碼轉換
- int nRes = sqlite3_open("D:\\sqlite\\test.db", &pDB);
- if (nRes != SQLITE_OK)
- {
- cout<<"Open database fail: "<<sqlite3_errmsg(pDB);
- goto QUIT;
- }
-
- //添加“趙錢孫李”
- if ( !AddUser("zhao", "18")
- || !AddUser("qian", "19")
- || !AddUser("sun", "20")
- || !AddUser("li", "21"))
- {
- goto QUIT;
- }
-
- //刪除“趙”
- if (!DeleteUser("zhao"))
- {
- goto QUIT;
- }
-
- //修改“孫”
- if (!ModifyUser("sun", "15"))
- {
- goto QUIT;
- }
-
- //尋找使用者
- if (!SelectUser())
- {
- goto QUIT;
- }
-
- QUIT:
- sqlite3_close(pDB);
-
- return 0;
- }
-
- bool AddUser(const string& sName, const string& sAge)
- {
- string strSql = "";
- strSql += "insert into user(name,age)";
- strSql += "values(‘";
- strSql += sName;
- strSql += "‘,";
- strSql += sAge;
- strSql += ");";
-
- char* cErrMsg;
- int nRes = sqlite3_exec(pDB , strSql.c_str() ,0 ,0, &cErrMsg);
- if (nRes != SQLITE_OK)
- {
- cout<<"add user fail: "<<cErrMsg<<endl;
- return false;
- }
- else
- {
- cout<<"add user success: "<<sName.c_str()<<"\t"<<sAge.c_str()<<endl;
- }
-
- return true;
- }
-
- bool DeleteUser(const string& sName)
- {
- string strSql = "";
- strSql += "delete from user where name=‘";
- strSql += sName;
- strSql += "‘;";
-
- char* cErrMsg;
- int nRes = sqlite3_exec(pDB , strSql.c_str() ,0 ,0, &cErrMsg);
- if (nRes != SQLITE_OK)
- {
- cout<<"delete user fail: "<<cErrMsg<<endl;
- return false;
- }
- else
- {
- cout<<"delete user success: "<<sName.c_str()<<endl;
- }
-
- return true;
- }
-
- bool ModifyUser(const string& sName, const string& sAge)
- {
- string strSql = "";
- strSql += "update user set age =";
- strSql += sAge;
- strSql += " where name=‘";
- strSql += sName;
- strSql += "‘;";
-
- char* cErrMsg;
- int nRes = sqlite3_exec(pDB , strSql.c_str() ,0 ,0, &cErrMsg);
- if (nRes != SQLITE_OK)
- {
- cout<<"modify user fail: "<<cErrMsg<<endl;
- return false;
- }
- else
- {
- cout<<"modify user success: "<<sName.c_str()<<"\t"<<sAge.c_str()<<endl;
- }
-
- return true;
- }
-
- static int UserResult(void *NotUsed, int argc, char **argv, char **azColName)
- {
- for(int i = 0 ; i < argc ; i++)
- {
- cout<<azColName[i]<<" = "<<(argv[i] ? argv[i] : "NULL")<<", ";
- }
- cout<<endl;
-
- return 0;
- }
-
- bool SelectUser()
- {
- char* cErrMsg;
- int res = sqlite3_exec(pDB, "select * from user;", UserResult , 0 , &cErrMsg);
-
- if (res != SQLITE_OK)
- {
- cout<<"select fail: "<<cErrMsg<<endl;
- return false;
- }
-
- return true;
- }
? 編譯成功後,將sqlite3.dll複製到SQLiteTest.exe同一目錄下,運行SQLiteTest.exe。
運行結果:
[plain] view plain copy
- add user success: zhao 18
- add user success: qian 19
- add user success: sun 20
- add user success: li 21
- delete user success: zhao
- modify user success: sun 15
- id = 2, name = qian, age = 19,
- id = 3, name = sun, age = 15,
- id = 4, name = li, age = 21,
5、 SQLite管理工具
可視化管理工具,推薦使用:SQLite Expert,見:http://www.sqliteexpert.com/。
C++使用SQLite步驟及樣本