加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

SQlite3高级应用篇(C/C++编程接口)

发布时间:2020-12-12 20:38:19 所属栏目:百科 来源:网络整理
导读:/*/////////////////////////////////简介/////////////////////////////////SQLite是一种嵌入式数据库,它跟微软的Access差不多,只是一个.db格式的文件。但是与Access不同的是,它不需要安装任何软件,非常轻巧。很多软件都有用到这个家伙,包括腾讯QQ、迅
/*
/////////////////////////////////简介/////////////////////////////////
SQLite是一种嵌入式数据库,它跟微软的Access差不多,只是一个.db格式的文件。但是与Access不同的是,它不需要安装任何软件,非常轻巧。很多软件都有用到这个家伙,包括腾讯QQ、迅雷(你在迅雷的安装目录里可以看到有一个sqlite3.dll的文件,就是它了),以及现在大名鼎鼎的android等。SQlite3是它的第三个主要版本。就是SQLite3.0的意思。 对了,金山词霸也有用到SQLite,其实太多软件用那玩意儿了。

SQLite是一个开源的嵌入式关系数据库,在2000年由D.Richard Hipp发布。SQLite能够减少应用程序管理数据库的开销,可逢移植性好,高效而且可靠。SQLite嵌入到应用程序中,与应用程序共用相同的进程空间,而不是单独的一个进程。从外部看,SQLite并不像一个关系数据库,但在进程内部,却是完整的、自包含的数据库引擎。
*/
/*
核心对象:
数据库连接对象: sqlite3
prepared_statement对象: sqlite3_stmt

严格的讲sqlite3_stmt对象也不是必须的,另外两个封装了sqlite3_stmt的接口sqlite3_exec和sqlite3_get_table可以代替sqlite3_stmt对象完成数据存取工作,但是理解sqlite3_stmt对于充分使用SQLite有很大帮助以下是一些操作sqlite3和sqlite3_stmt对象的接口,下面这些名字只是提供一个概念,实际的函数可能会有很多版本比如sqlite3_open()有,sqlite3_open_v16(),sqlite3_open_v2()
*/
/*
关键函数:
*/
sqlite3_open()		//打开数据库
sqlite3_prepare()	//将SQL语句转换成sqlite3_stmt对象,增加版sqlite3_prepare_v2()
sqlite3_step()		//单步执行sqlite3_stmt
sqlite3_column()	//返回sqlite3_stmt所在行的指定column的值
sqlite3_finalize()	//销毁sqlite3_stmt对象,释放内存
sqlite3_close()		//关闭数据库
/*
只要会用以上六个函数的使用也就差不多已经进入了SQlite3的C/C++编程了
*/
#include <iostream>
#include <string.h>
#include "sqlite3.h"
#pragma comment(lib,".SQLite3.lib")

using namespace std;

/*
编译环境:VC6.0
*/

//创建"表"函数
void Create(int &rc,sqlite3 *db,char *sql,sqlite3_stmt *stmt)
{
	//判断是否已经存在表了
	rc=sqlite3_prepare_v2(db,sql,strlen(sql),&stmt,0);
	if (rc)
	{
		fprintf(stderr,"对象转换失败:%sn",sqlite3_errmsg(db));
		return;
	}
	//执行stmt(执行SQL语句)
	sqlite3_step(stmt);
	//释放stmt资源
	sqlite3_finalize(stmt);
}

void Insert(int &rc,sqlite3_stmt *stmt,char name[])
{
	sprintf(sql,"INSERT INTO MyTable VALUES(NULL,'%s');",name);
	rc=sqlite3_prepare_v2(db,sqlite3_errmsg(db));
		return;
	}
	sqlite3_step(stmt);
	sqlite3_finalize(stmt);
}

int main()
{
	//sqlite3两个重要对象
	sqlite3 *db;
	sqlite3_stmt *stmt=0;
	
	//创建表的结构
	char sql[]=	"CREATE TABLE IF NOT EXISTS MyTable(ID integer NOT NULL primary "
		"key autoincrement,Name nvarchar(32));";
	
	//[1]打开数据库
	int rc=sqlite3_open("MyDB.db",&db);
	if (rc)
	{
		sqlite3_close(db);
		return -1;
	}
	else
		Create(rc,db,stmt);
	
	//向数据里边插入些数据,用来测试
	Insert(rc,stmt,"张三");
	Insert(rc,"李四");
	Insert(rc,"王五");
	Insert(rc,"赵六");
	
	sprintf(sql,"SELECT * FROM MyTable;");
	//[2]将SQL语句转换成stmt对象
	sqlite3_prepare_v2(db,0);
	int id;
	unsigned char *name;
	//[3]循环执行stmt对象,读取数据库里边的数据
	while(sqlite3_step(stmt)==SQLITE_ROW)
	{
		//[4]绑定变量
		id=sqlite3_column_int(stmt,0);
		name=(unsigned char *)sqlite3_column_text(stmt,1);
		cout<<id<<'t'<<name<<endl;
	}
	//[5]释放资源
	sqlite3_finalize(stmt);
	//[6]关闭数据库
	sqlite3_close(db);
	return 0;
}

本文源代码下载

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读