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

第一步:下载相关文件 

首先到这里下载sqlite-source-3_6_12.zipsqlite-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;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值