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

/*
/简介/
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,"对象转换失败:%s\n",sqlite3_errmsg(db));
        return;
    }
    //执行stmt(执行SQL语句)
    sqlite3_step(stmt);
    //释放stmt资源
    sqlite3_finalize(stmt);
}

void Insert(int &rc,char *sql,sqlite3 *db,sqlite3_stmt *stmt,char name[])
{
    sprintf(sql,"INSERT INTO MyTable VALUES(NULL,'%s');",name);
    rc=sqlite3_prepare_v2(db,sql,strlen(sql),&stmt,0);
    if (rc)
    {
        fprintf(stderr,"对象转换失败:%s\n",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,sql,stmt);

    //向数据里边插入些数据,用来测试
    Insert(rc,sql,db,stmt,"张三");
    Insert(rc,sql,db,stmt,"李四");
    Insert(rc,sql,db,stmt,"王五");
    Insert(rc,sql,db,stmt,"赵六");

    sprintf(sql,"SELECT * FROM MyTable;");
    //[2]将SQL语句转换成stmt对象
    sqlite3_prepare_v2(db,sql,strlen(sql),&stmt,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;
}

本文源代码下载

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
SQLite3是一款轻量级的关系型数据库管理系统,它是以C语言写成的,并且提供了C语言的API接口。要在C++中使用SQLite3,可以使用SQLite C/C++接口,该接口包含在SQLite3的源代码中,可以通过下载SQLite3的源码来获得。 以下是在C++中使用SQLite3的基本步骤: 1. 下载SQLite3的源代码并解压缩。 2. 在C++项目中添加SQLite3的源代码文件。 3. 在需要使用SQLite3的地方包含SQLite3的头文件: ```c++ #include <sqlite3.h> ``` 4. 打开数据库连接: ```c++ sqlite3* db; int rc = sqlite3_open("database.db", &db); if(rc != SQLITE_OK) { // 连接失败 } ``` 这里的`database.db`是数据库文件的名称,如果该文件不存在,则会自动创建。 5. 执行SQL语句: ```c++ char* errmsg; int rc = sqlite3_exec(db, "CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEY, name TEXT, age INTEGER)", nullptr, nullptr, &errmsg); if(rc != SQLITE_OK) { // 执行SQL语句失败 } ``` 上面的SQL语句创建了一个名为`users`的表,该表包含三个字段:`id`、`name`和`age`。 6. 查询数据: ```c++ sqlite3_stmt* stmt; int rc = sqlite3_prepare_v2(db, "SELECT * FROM users", -1, &stmt, nullptr); if(rc != SQLITE_OK) { // 查询失败 } while(sqlite3_step(stmt) == SQLITE_ROW) { int id = sqlite3_column_int(stmt, 0); const char* name = (const char*)sqlite3_column_text(stmt, 1); int age = sqlite3_column_int(stmt, 2); // 处理查询结果 } sqlite3_finalize(stmt); ``` 上面的代码查询了`users`表中的所有数据,并逐行读取数据。`sqlite3_prepare_v2`函数用于准备SQL语句,`sqlite3_step`函数用于执行SQL语句并读取结果,`sqlite3_finalize`函数用于释放资源。 7. 关闭数据库连接: ```c++ sqlite3_close(db); ``` 关闭数据库连接会释放所有相关资源,包括打开的文件句柄、内存等。 SQLite3的API接口非常简单,使用起来也比较方便,但需要注意的是,SQLite3不支持并发访问,因此在多线程环境中使用时需要注意线程安全问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值