关于vs2010中mfc使用sqlite3

今天写下关于vs2010mfc使用sqlite3的文章,本人水平有限,有错或改进的,尊请各位看官指出啊^_^

不费话,不多说,有关sqlite的详细可以百度、google哈。本文是讲如何连接使用sqlite的,切入正题,请准备好工具!

第一步:

Sqlite的官方网站(http://www.sqlite.org/download.html)下载http://www.sqlite.org/snapshot/sqlite-amalgamation-201308152240.zip源文件。

下载完没?OK,下面我们要制作dll文件,要有sqlite.lib才能使用!

①用vs2010  文件—新建项目—Win32Win32项目,项目取名叫”sqlite”吧

 

下一步:选DLL(D),再勾空项目

 

OK,sqlite3ext.hsqlite3.hsqlite.c这三个东东复制到工程里(不要shell.c的哦)

 

OK,在 配置管理器  里改为release

 

OK,F5编译!

②到Release目录下把sqlite.lib连同sqlite3ext.hsqlite3.hsqlite.c一起复制到你要使用数据库里的工程里,在工程资源文件里添加sqlite.lib

 

③ 这你懂的!

extern "C"{

#include "sqlite3.h"

};

#pragma comment(lib,"sqlite.lib")

/*

为什么要 extern C” ?这是C++的基础。要在 C++里使用一段 的代码,必须要用 extern C” 括起来。C++跟 C虽然语法上有重叠,但是它们是两个不同的东西,内存里的布局是完全不同的,在C++编译器里不用extern C”括起C代码,会导致编译器不知道该如何为 代码描述内存布局。可能在 sqlite3.c 里人家已经把整段代码都 extern C” 括起来了,但是你遇到一个.c 文件就自觉的再括一次,也没什么不好。

*/

//-----------------------------------------------------OK,尽情的爽吧---------------------------------------------------//

下载是我简单作用sqlite3的代码,不好看,请包涵!

 详细教程在这:http://download.csdn.net/detail/q775968375/5970059

void CMySqliteDlg::OnBnClickedOk()
{
	// TODO: 在此添加控件通知处理程序代码
	//CDialogEx::OnOK();
	CTime m_time;
    m_time=CTime::GetCurrentTime();//获取当前时间日期  
	FILE *fp=fopen("debug.txt","a+");
	fprintf(fp,"\n------------------------%s------------------------\n"
		,m_time.Format(_T("%Y-%m-%d %H:%M:%S %A")));

	::sqlite3 *db=NULL;
	::sqlite3_stmt *stmt;
	char *sql=NULL,*error=NULL;
	const char *tail=NULL;
	int res;
	res=::sqlite3_open("MySqlite.db",&db);//打开数据库(不存在创建)
	if(res!=SQLITE_OK){
	    ::sqlite3_close(db);
		fprintf(fp,"open database is failure:%s\n",::sqlite3_errmsg(db));
		return;
	}else fprintf(fp,"open database is success!\n");

	    //create table
	    sql="create table if not exists MyTable(Row integer primary key autoincrement,Content text)";
		res=::sqlite3_exec(db,sql,NULL,NULL,&error);
		if(res!=SQLITE_OK){
	      ::sqlite3_close(db);
		  fprintf(fp,"error create table:%s %s\n",error,::sqlite3_errmsg(db));
		  return;
		}else fprintf(fp,"table is created\n");
	

		//insert
		sql="insert or replace into MyTable(Row,Content) values(?,?)";
		//sqlite3_prepare_v2的作用是将UTF-8格式的SQL语句转换为编译后的语句,并返回指向该语句的指针  
		res=::sqlite3_prepare_v2(db,sql,-1,&stmt,&tail);
		if(res!=SQLITE_OK){
	      ::sqlite3_close(db);
		  fprintf(fp,"insert is failure:%s %s\n",tail,::sqlite3_errmsg(db));
		  return;
		}
		for(int i=0;i<3;i++){
		//::sqlite3_bind_int(stmt,1,0);//1:id  2:data
		::sqlite3_bind_text(stmt,2,"数据库数据",-1,NULL);
		if(::sqlite3_step(stmt)!=SQLITE_DONE){
			fprintf(fp,"error update table:%s\n",::sqlite3_errmsg(db));
		 }
		::sqlite3_reset(stmt); //重新初始化该sqlite3_stmt对象绑定的变量。
		}
		::sqlite3_finalize(stmt);
		//delete
		sql="delete from MyTable where Row=2";
		//res=::sqlite3_prepare_v2(db,sql,-1,&stmt,&tail);
		res=::sqlite3_exec(db,sql,NULL,NULL,&error);
		if(res!=SQLITE_OK){
	      ::sqlite3_close(db);
		  fprintf(fp,"delete error:%s %s\n",error,::sqlite3_errmsg(db));
		  return;
		}else fprintf(fp,"delete is success\n");
		::sqlite3_finalize(stmt);
		//update
		sql="update MyTable set Content='修改后的数据' where Row=3";
		res=::sqlite3_exec(db,sql,NULL,NULL,&error);
		if(res!=SQLITE_OK){
	      ::sqlite3_close(db);
		  fprintf(fp,"update error:%s %s\n",error,::sqlite3_errmsg(db));
		  return;
		}else fprintf(fp,"update is success\n");
		::sqlite3_finalize(stmt);
		//query
		sql="select Row,Content from MyTable order by Row";
		res=::sqlite3_prepare_v2(db,sql,-1,&stmt,&tail);
		if(res!=SQLITE_OK){
	      ::sqlite3_close(db);
		  fprintf(fp,"query is failure:%s %s\n",tail,::sqlite3_errmsg(db));
		  return;
		}
		while(::sqlite3_step(stmt)==SQLITE_ROW){
			static int cnt=::sqlite3_column_count(stmt);
			for(int i=0;i<cnt;i++){
				fprintf(fp,"Data:%s\n",::sqlite3_column_text(stmt,i));
			}
			/*
			int row=::sqlite3_column_int(stmt,0);
			char *rowData=(char*)::sqlite3_column_text(stmt,1);
			if(rowData==NULL)rowData="NULL";
			*/
		}
		//释放statement
		::sqlite3_finalize(stmt);
		//关闭数据库
		::sqlite3_close(db);
		::fclose(fp);
}


  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值