SQLite学习笔记(三)-- 打开和关闭数据库(C++实现)

1.Sqlite库的使用

相对来说Sqlite库的使用还是比较简单的。只需要包含头文件和库文件,同时将动态链接库放在执行程序目录下。

//sqlite3头文件
#include "sqlite3.h"
//sqlite3库文件
#pragma comment(lib,"sqlite3.lib")

2.打开数据库接口

  • 函数原型
int sqlite3_open(  const char *filename,  sqlite3 **ppDb  );
  • 参数列表
    const char *filename – 数据库文件名,建议使用时包含完整路径,该路径应为UTF8编码格式
    sqlite3 **ppDb – 数据库句柄
  • 返回值
    int型数值 – 函数执行成功时,返回0;否则返回错误码
  • 错误码的获取
    当执行失败时,我们可以利用sqlite3_errmsg()函数来获取错误吗。该函数的原型如下:
const char *sqlite3_errmsg(sqlite3*);

注意:
1.打开数据库的时候,数据库文件名应为UTF8格式。如果路径名含有中文,需要先将国标字符转换为UTF8格式。转换方法见下文的示例代码;
2.当文件名参数为完整路径时,如果上层路径都存在,只是数据库名文件名不对时,该函数会自动在路径下建立对应的数据库文件,并返回打开成功;
3.如果上层路径不正确,这时会返回数据库打开失败;
4.综上所述,sqlite3_open()函数不会自动创建文件夹,只会尝试自动创建文件。

3.关闭数据库接口

  • 函数原型
int sqlite3_close(sqlite3*);
  • 参数列表
    sqlite3* – 数据库句柄,该句柄由sqlite3_open()函数返回
  • 返回值
    int型数值 – 函数执行成功时,返回0。
    注意:
    1.sqlite3_close()函数返回值基本为0,即使在数据库句柄为NULL时。

4.代码实例

  • 代码说明
    本例主要说明如何打开和关闭SQLite数据库。
  • 测试平台
    1.开发语言:C++
    2.开发工具:VS2015
    3.操作系统:Win7 X64
  • 具体代码
#include <iostream>
#include <Windows.h>
using namespace std;

//sqlite3头文件
#include "sqlite3.h"
//sqlite3库文件
#pragma comment(lib,"sqlite3.lib")

//函数功能:将utf8字符转gb2312字符
//参数:    const char* utf8[IN]                   -- UTF8字符
//返回值:  char*                                  -- gb2312字符
char* U2G(const char* utf8)
{
    int len = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0);
    wchar_t* wstr = new wchar_t[len + 1];
    memset(wstr, 0, len + 1);
    MultiByteToWideChar(CP_UTF8, 0, utf8, -1, wstr, len);
    len = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL);
    char* str = new char[len + 1];
    memset(str, 0, len + 1);
    WideCharToMultiByte(CP_ACP, 0, wstr, -1, str, len, NULL, NULL);
    if (wstr) delete[] wstr;
    return str;
}

//函数功能:将gb2312字符转换为utf8字符
//参数:    const char* gb2312[IN]                   -- gb2312字符
//返回值:  char*                                    -- UTF8字符
char* G2U(const char* gb2312)
{
    int len = MultiByteToWideChar(CP_ACP, 0, gb2312, -1, NULL, 0);
    wchar_t* wstr = new wchar_t[len + 1];
    memset(wstr, 0, len + 1);
    MultiByteToWideChar(CP_ACP, 0, gb2312, -1, wstr, len);
    len = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL);
    char* str = new char[len + 1];
    memset(str, 0, len + 1);
    WideCharToMultiByte(CP_UTF8, 0, wstr, -1, str, len, NULL, NULL);
    if (wstr) delete[] wstr;
    return str;
}

int main()
{
    sqlite3 *pDataBase = NULL;                              
    char *zErrMsg = 0;
    //打开数据库
    //如果路径不含中文,可以不用转码。不过保险起见,建议全部转码。
    int iRet = sqlite3_open(G2U("E:\\sqlite数据库\\test.db"), &pDataBase);
    if (iRet)
    {
        cout << "数据库打开失败,失败原因:" << sqlite3_errmsg(pDataBase) << endl;
    }
    else
    {
        cout << "数据库打开成功!" << endl;

        //关闭数据库
        iRet= sqlite3_close(pDataBase);
        if (0 == iRet)
        {
            cout << "数据库关闭成功!" << endl;
        }
    }
    getchar();
    return 0;
}
  • 输出结果
    这里写图片描述

栏目导航
上一篇:SQLite学习笔记(二)– SQLite数据库的建立与访问
下一篇:SQLite学习笔记(四)– 数据表的定义、修改与删除(C++实现)

阅读更多
换一批

没有更多推荐了,返回首页