SQLite在Windows/VS下的安装配置及使用(整理版)

1.SQLite简述

1.1 引言

  • 数据库保存有组织的数据的容器(通常是一个文件或是一组文件)
  • SQL:SQL (发音为字母S-Q-L或是sequel) 是 Structured Query Language(结构化查询语言)的缩写。SQL是一种专门用来与数据库沟通的语言
  • 误用导至混淆:人们通常用数据库这个术语来代表他们使用的数据库软件,这是不正确的,也因此产生了许多混淆。确切地说,数据库软件应称为数据库管理系统(DBMS)。数据库是通过DBMS创建和操纵的容器,而具体它究竟是什么,形式如何,各种数据库都不一样。

1.2 没有最好的,只有最合适的。

数据库软件有很多种,针对笔者的应用场景,将目标定位在了SQLite和MySQL这两个上。开源,轻量,便于移植,是我选择时的主要考虑因素,这里最终选择了SQLite

SQLite精巧、轻量、追求高性能(单机下),无需进行附加安装,便于移植,没有网络层,适用于单机、移动应用、嵌入式。

MySQL功能强大,体积较小(相较于大型数据库),支持高并发,支持多种连接方式,适用于C/S模型、中小型网站等。

 

2.SQLite的安装和配置

2.1 系统环境

笔者暂用的环境是 Win10 64bit + VS2105,不过重要的是方法和流程,如果使用win7和VS的其他版本应该都是大同小异。

后面笔者计划将其用到嵌入式linux中,再另作笔记。

2.2 下载及配置

SQLite的官网下载地址:https://www.sqlite.org/download.html

该页面可见SQLite的源码和说明文档,也提供了Android、 Linux、Mac OS X 和Windows等环境下的不同版本的SQLite的预编译文件下载。

SQLite在Windows/VS下的安装配置及使用(整理版)_第1张图片

针对笔者的环境,下载这两个文件,sqlite-dll-win64-x64-3300100.zip 和 sqlite-tools-win32-x86-3300100.zip,前者是已经编译好的64bit的动态链接库文件,后者是windows下的管理工具包。分别解压可以得到:

SQLite在Windows/VS下的安装配置及使用(整理版)_第2张图片

将上面解压后的5个文件都放到一个自己指定的文件夹下,将该文件夹的路径添加到系统环境变量中,即可通过cmd使用,这样做的目的也仅仅是为了方便通过命令行的方式使用,与其他无关。

操作方法:右键我的电脑-属性-高级系统设置-环境变量,在系统环境变量中找到“Path”,选中“Path”,编辑,新建,将刚才的文件夹路径加入,例如:“D:\SQLite”。打开cmd,输入sqlite3,如果显示版本号等信息,即表示成功。

通过这种方式便可在cmd中通过命令行创建和操作数据库。

打开或创建数据库:sqlite3 数据库名.db (可以打开数据库文件,如果该数据库文件不存在,则创建一个)。

查看创建的数据库: .database 

退出:.quit

SQLite在Windows/VS下的安装配置及使用(整理版)_第3张图片

 

3.SQLite结合VS进行使用

3.1  编译为库文件使用

编译为库文件的方式,使用起来灵活度高,便于移植。

3.1.1 下载源码文件

在官网下载源码文件 sqlite-amalgamation-3300100.zip,解压得到如下图所示的文件,备用。

SQLite在Windows/VS下的安装配置及使用(整理版)_第4张图片

3.1.1 编译动态库文件

解压 sqlite-dll-win64-x64-3300100.zip 文件,得到sqlite3.def和sqlite3.dll文件,在VS的安装目录下,笔者是“ XXX\Microsoft Visual Studio 14.0\VC\bin\”下找到lib.exe,link.exe和mspdb140.dll文件,拷贝到同一目录下。

打开cmd窗口,切换到该路径下,输入命令:.\lib.exe /def:sqlite3.def /machine:X64。这时,在sqlite-dll文件夹下会出现sqlite3.lib。这个 sqlite3.lib便是动态的库文件,其相当于一个h文件,是对实现部分(.dll文件)的导出部分的声明,在运行时仍需要相应的dll文件支持 。

注意:如果是32位的系统,应该下载对应的32位的文件,此处的命令行参数也要相应的修改为“machine:IX86

SQLite在Windows/VS下的安装配置及使用(整理版)_第5张图片

3.1.2 编译静态库文件

1、使用vs2015创建win32工程,然后选择静态库,去掉“预编译头”选项的勾选。

2、把sqlite3.c、sqlite3.h、sqlite3ext.h、sqlite3.def拷贝到工程源文件目录,这几个文件都来源于之前解压的Zip。

3、然后通过工程的资源管理器把上述4个文件添加到工程中

4、修改工程配置,在配置属性-->c/c++-->预处理器-->预处理器定义,加入

      SQLITE_ENABLE_RTREE
      SQLITE_ENABLE_COLUMN_METADATA

5、修改工程配置,在配置属性-->链接器-->输入-->模块定义文件 加入sqlite3.def。

6、选择release或debug模式,生成解决方案,在工程目录下的release或debug文件夹下即可找到lib文件

注意:如果lib是在release环境下创建出来的,调用也应在release环境下,同理,如果lib是在debug环境下创建出来的,调用也应在debug环境下。

3.1.3 在VS中使用库文件

在VS中新建一个工程,如果使用动态库,将sqlite3.h、sqlite3.lib、sqlite3.dll3个文件复制到工程所在文件目录中。如果使用静态库,则只拷贝sqlite3.h、sqlite3.lib两个文件即可。

然后,在工程中添加头文件和库文件可以直接在代码中添加,如下所示,也可以在工程设置中添加(先设置包含目录和库目录,然后选择链接器--输入--附加依赖项中添加lib),就可以使用SQLite数据库了。

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

参考实现1:

// test1.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include 
#include "sqlite3.h"
int _tmain(int argc, _TCHAR* argv[])
{
    int rc;
    int i, nrows, ncols, tr;
    char *errmsg = NULL;
    char **results;
    
    sqlite3 *db = NULL;
    rc = sqlite3_open("demodb", &db);
    if (rc)
    {
        fprintf(stderr, "can't open db!\n", sqlite3_errmsg(db));
        sqlite3_close(db);
        exit(1);
    }
    else
    {
        printf("db open successfully!\n");
    }
    sqlite3_get_table(db,"select * from clients;",&results,&nrows,&ncols,&errmsg);
    printf("DB has %d rows and %d cols\n\n",nrows,ncols);
    tr=(nrows+1)*ncols;
    for(i=0;i

 参考实现2:

首先,我们使用 sqlite3_open 函数根据数据库文件名称创建 SQLite 数据库。sqlite3_open 函数的第 1 个参数表示要创建的数据库名称,第 2 个参数获取数据库创建成功后的数据库句柄。

// 打开数据库,创建连接
    int iRet = sqlite3_open(szFileName, &conn);
    if (SQLITE_OK != iRet)
    {
        ShowError("sqlite3_open");
        return 1;
    }

然后,我们就可以直接调用 sqlite3_exec 函数执行SQL语句,来对数据库进行操作。其中, sqlite3_exec 函数的第 1 个参数表示数据库的句柄;第 2 个参数表示SQL语句;第 3 个参数表示回调函数,每成功执行一次SQL语句就执行一次回调函数;第 4 个参数表示回调函数返回的数据信息。

现在,我们执行SQL语句 “CREATE TABLE demongan(ID int, Name varchar (20), Age int)”来创建一个名为demongan的表:

// 执行SQL语句,创建表demongan
    ::wsprintf(szSQL, "CREATE TABLE demongan(ID int, Name varchar(20), Age int)");
    iRet = sqlite3_exec(conn, szSQL, NULL, NULL, &szErr);
    if (SQLITE_OK != iRet)
    {
        ShowError("sqlite3_exec", szErr);
        return 2;
    }

然后,继续调用 sqlite3_exec 函数执行SQL语句,将数据插入数据库中:

// 执行SQL语句,插入10条记录
    for (i = 0; i < 10; i++)
    {
        ::wsprintf(szSQL,
            "INSERT INTO demongan(ID, Name, Age) VALUES(%d, \'%s%d\', %d)",
            i, "Name", i, i + 1);
        iRet = sqlite3_exec(conn, szSQL, NULL, NULL, &szErr);
        if (SQLITE_OK != iRet)
        {
            ShowError("sqlite3_exec", szErr);
            return 3;
        }
    }

接着,继续调用 sqlite3_exec 函数执行SQL语句,查询数据库,注意此处需要传入第 3 个参数,也就是回调函数,以此来显示查询结果:

// 执行SQL语句,查询记录
    ::wsprintf(szSQL, "SELECT * FROM demongan");
    iRet = sqlite3_exec(conn, szSQL, sqlite3_exec_callback, NULL, &szErr);
    if (SQLITE_OK != iRet)
    {
        ShowError("sqlite3_exec");
        return 4;
    }

那么,回调函数 sqlite3_exec_callback 的函数名称是任意的,但是参数是固定的。一共有 4 个参数,第 1 个参数是由 sqlite3_exec 函数的第 4 个参数传递而来;第 2 个参数是表的列数;第 3 个参数表示查询到的值的指针数组;第 4 个参数表示列名即字段名指针数组。

本文回调函数 sqlite3_exec_callback 的代码如下:

int sqlite3_exec_callback(void *data, int colNum, char **colValue, char **colName)
{
    int i = 0;
    for (i = 0; i < colNum; i++)
    {
        printf("%s[%s]\t", colName[i], colValue[i]);
    }
    printf("\n");
    return 0;
}

 

3.2 直接在VS中添加SQLite组件

这是实现在VS中使用SQLite的其他实现方式,笔者未测试如下的方式,此处用作记录。

3.2.1  安装SQLite数据源的方式

在官网地址:http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki

1.下载SQLite数据库安装包:注意选择与自己的环境相匹配的版本,此处选择 了 sqlite-netFx40-setup-bundle-x64-2010-1.0.112.0.exe  其实用于64-bit Windows (.NET Framework 4.0) 环境,包含System.Data.SQLite x64版本,且集成了设计器。

SQLite在Windows/VS下的安装配置及使用(整理版)_第6张图片

2.安装SQLite数据库(System.Data.SQLite):双击下载好的exe程序,按提示一路安装即可

3.使用:新建工程,在VS2015的服务器资源管理器的数据连接里单击“添加连接”,选择数据源为 System.Data.SQLite Database File ,在弹出的对话输入名称,框新建(new)一个该类型的数据库,接下来可像使用普通SQL数据库一样操作。

4.操作方法:参考博客https://blog.csdn.net/ksws0263785/article/details/101866734

 

3.2.2  引用System.Data.SQLite.DLL的方式

参考博客:https://blog.csdn.net/qq_30725967/article/details/88168873

 

3.2.3  在VS方式中安装扩展的方式

参考博客:https://blog.csdn.net/dgplm/article/details/78942282

 

4.SQLiteke可视化管理工具

仅使用shell操纵SQLite数据库还是很不方便的,一些SQLite管理工具如下:

1、sqlitestudio :https://sqlitestudio.pl/index.rvt?act=download     有免安装版,解压直接运行。

2、SQLiteSPY:https://www.yunqa.de/delphi/products/sqlitespy/index    有免安装版,解压直接运行。

3、sqliteexpert:http://www.sqliteexpert.com/index.html

 

本文参考和整理了诸多文章,谢谢!

转载于:https://www.cnblogs.com/imoon/archive/2012/11/30/2796726.html

转载于:https://www.cnblogs.com/superbi/p/4980127.html

转载于:https://www.write-bug.com/article/1590.html

 

------------------------------------------------------⬆⬆⬆⬆⬆⬆⬆⬆⬆[2019-10-31]⬆⬆⬆⬆⬆⬆⬆--------------------------------------------------

 

你可能感兴趣的:(数据库)