C++ 访问操作跨平台数据库Sqlite

来源:互联网 发布:网页数据采集软件 编辑:程序博客网 时间:2024/04/29 09:12
第一步:下载相关文件 

首先到这里下载sqlite-source-3_6_12.zip、sqlite-3_6_12.zip、 sqlitedll-3_6_12.zip三个包,并分别解压。 这里可以在D 盘建立目录

Sqlite目录下包含文件夹 bin(存放解压的dll def 这两个文件用生成lib文件) lib(用于存放生成的lib 文件) source(存放加压的头文件)

第二步:生成SQLite的lib文件 
cmd进入命令行后转到D盘Sqlite下的bin目录下输入: LIB /DEF:SQLITE3.DEF /MACHINE:IX86 
如果找不到命令LIB,则需要将Microsoft Visual Studio\VC\Bin这个目录添加到环境变量(path)里。然后需要把VS 目录下的Common7\IDE 下的mspdb100.dll和mspdbsrv.exe拷贝到VC\bin 目录下(若没有加入这两个文件将出现 缺少mspdb100.dll和Error 2 error C1902: Program database manager mismatch; please check your in 错误) 这样就生成了sqlite3.lib文件,我们在后面需要用到这个库,用于链接win32程序 

第三步:编写测试工程 
新建项目,将sqlite3.h(在源码包里)、sqlite3.dll、sqlite3.lib设置到工程环境里,或者直接拷贝到工程目录下。 
然后我们将cmd切换到sqlite3的目录下,里面有个sqlite3.exe。执行命令: 
> sqlite3 D:\sql.db   ;生成sql.db的数据库文件 
sqlite3 > create table test_tab (f1 int, f2 long); 
sqlite3 > .q
 

测试代码

#include "sqlite3.h"#include <iostream>#include <sstream>using namespace std;sqlite3 * pDB ;int createTable(){char* errMsg;std::string dropTab = "drop table test_tab;";string strSQL= "create table test_tab (f1 int, f2 long);";int 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 , strSQL.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;}return 0;}int insert1(){char* errMsg;int res = sqlite3_exec(pDB,"begin transaction;",0,0, &errMsg);for (int i= 1; i < 10; ++i){std::stringstream strsql;strsql << "insert into test_tab  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;}}res = sqlite3_exec(pDB,"commit transaction;",0,0, &errMsg);std::cout << "SQL成功执行."<< std::endl;return 0;}static int callback(void *NotUsed, int argc, char **argv, char **azColName){for(int i = 0 ; i < argc ; i++){std::cout << azColName[i] << " = " << (argv[i] ? argv[i] : "NULL") << ", " ;}std::cout<< "\n";return 0;}int select1(){char* errMsg;string strSQL= "select * from test_tab;";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;}int main(){int res = sqlite3_open("D:\\sql.db", &pDB);if( res ){std::cout << "Can't open database: "<< sqlite3_errmsg(pDB);sqlite3_close(pDB);return -1;}res = createTable();{return 0;}res = insert1();if (res != 0){return 0;}select1();system("pause");return 0;}

原创粉丝点击