VS2019下Sqlite3数据库的环境搭建及简单应用

一、Sqlite3环境搭建

1、下载              

        去官网(SQLite Download Page)下载相应的源码及动态库文件,如下图所示:

VS2019下Sqlite3数据库的环境搭建及简单应用_第1张图片

         解压分别得到如下文件:

VS2019下Sqlite3数据库的环境搭建及简单应用_第2张图片

2、制作.lib文件

       在VS安装目录下(我的是D:\vs\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64)找到以下文件拷贝至sqlite-dll-win64-x64文件夹下,

VS2019下Sqlite3数据库的环境搭建及简单应用_第3张图片

        打开dos界面,目录打开至上述文件夹下输入:

LIB /MACHINE:IX86 /DEF:sqlite3.def

         看到文件夹下生成了.lib文件,至此i,所需的.c,.h,.lib,.dll文件已集全;

VS2019下Sqlite3数据库的环境搭建及简单应用_第4张图片

3、在vs项目中引入sqlite3;

       项目右键-属性-链接器(配置改为DEBUG)-常规-附加库目录中,把.h文件所在路径放上去;

       链接器(配置改为DEBUG)-输入-附加依赖项中加入sqlite3.lib,

       至此,完成了sqlite3环境的搭建。

二、Sqlite3的基础用法

1、文件准备

        将sqlite3.h,sqlite3ext.h,sqlite3.c以及sqlite3.lib和sqlite3.dll文件拷贝至测试项目下,按照前文1.3所述在vs项目属性中完成项目属性设置;

2、引用

       分别添加响应头文件和源文件至项目中;

VS2019下Sqlite3数据库的环境搭建及简单应用_第5张图片

         函数中添加头文件并引入lib文件;

#include "sqlite3.h"
#pragma comment(lib, "sqlite3.lib")

 3、链接数据库文件

// 数据库打开
    sqlite3* sql = NULL; // 一个打开的数据库实例
    const char* path = "data.db";//某个sql文件的路径
    int result = sqlite3_open_v2(path, &sql, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_NOMUTEX | SQLITE_OPEN_SHAREDCACHE, NULL);
    if (result == SQLITE_OK) {
        std::cout << "打开数据库连接成功" << endl;;
    }
    else {
        std::cout << "打开数据库连接失败" << endl;
    }

4、创建表

// 创建表
    const char* sqlCreatetable = "CREATE TABLE exam(name TEXT PRIMARY KEY NOT NULL, score1 INTEGER, score2 INTEGER);";
    sqlite3_stmt* stmt = NULL;        //stmt语句句柄
    result = sqlite3_prepare_v2(sql, sqlCreatetable, -1, &stmt, NULL);

    if (result == SQLITE_OK) {
        std::clog << "创建数据表成功" << endl;
        //执行该语句
        sqlite3_step(stmt);
    }
    else {
        std::clog << "创建数据表失败" << endl;
    }
    //清理语句句柄,准备执行下一个语句
    sqlite3_finalize(stmt);

5、向表中写入信息

// 表单中插入信息
    const char* sqlSentence = "INSERT INTO exam(name, score1, score2) VALUES('xiaohua', 90, 100); ";
    //进行插入前的准备工作——检查语句合法性
    //-1代表系统会自动计算SQL语句的长度
    result = sqlite3_prepare_v2(sql, sqlSentence, -1, &stmt, NULL);
    
    if (result == SQLITE_OK) {
        std::clog << "添加数据语句OK" << endl;
        //执行该语句
        sqlite3_step(stmt);
    }
    else {
        std::clog << "添加数据语句有问题" << endl;
    }
    sqlSentence = "INSERT INTO exam(name, score1, score2) VALUES('xiaogang', 20, 10); ";
    result = sqlite3_prepare_v2(sql, sqlSentence, -1, &stmt, NULL);
    sqlite3_step(stmt);
    //清理语句句柄,准备执行下一个语句
    sqlite3_finalize(stmt);

6、从表中读取信息

// 查询
    char* errmsg;
    char** mResult;//结果集
    int mRow;//行数
    int mCol;//列数
    int nResult = sqlite3_get_table(sql, "select * from exam;", &mResult, &mRow, &mCol, &errmsg);

    int nIndex = mCol;
    cout << "mRow: " << mRow << endl;
    cout << "mCol: " << mCol << endl;

    if (mRow > 0 && mCol > 0)
    {
        student stu;
        for (int i = 0; i < mRow; i++)
        {
            for (int j = 0; j < mCol; j++)
            {
                if (!strcmp("name", mResult[j]))
                {
                    stu.name = mResult[nIndex];
                    cout << "name=" << stu.name << endl;
                }
                else if (!strcmp("score1", mResult[j]))
                {
                    stu.score1 = atoi(mResult[nIndex]);
                    cout << "score1=" << stu.score1 << endl;
                }
                else if (!strcmp("score2", mResult[j]))
                {
                    stu.score2 = atoi(mResult[nIndex]);
                    cout << "score2=" << stu.score2 << endl;
                }
                ++nIndex;
            }
        }
        //使用完 sqlite3_get_table 后务必释放为记录分配的内存,否则会内存泄漏
        sqlite3_free_table(mResult);
    }

       至此,初步了解了c++下sqlite的常见读写操作(python真香,只需一句import);

       参照:

           win10下使用VS2019调用sqlite3环境搭建_跑不了的你的博客-CSDN博客

           本地数据库 sqlite3 编译和使用_跑不了的你的博客-CSDN博客

            sqlite c++简单demo(win10 vs2019)_山水一的博客-CSDN博客

你可能感兴趣的:(c++,visual,studio,数据仓库,数据库开发)