SQLite安装与使用

在之前的文章中,给出了一个数据库知识的概览:《数据库概览》,本文介绍一些基础的、常用的 SQLite数据库知识。

SQLite 基础

SQL 基础语法

  • 插入
INSERT INTO 表名 (列名1,...)
VALUES (列1值,...);
  • 修改
UPDATE 表名
SET 列名1= 列1值, ....

WHERE [条件表达式];
  • 删除
DELETE FROM 表名
WHERE [条件表达式];
  • 查询

c++\ SELECT 列名1, .... FROM 表名; WHERE [条件表达式];</p> <pre><code>* 创建表 ++
CREATE TABLE 库名.表名(
列1名 类型 特征(主键、唯一、非空、自增、注释),

);

  • 删除表
DROP TABLE 表名;

SQLite 接口函数

// 打开文件:如果文件存在,则尝试打开;如果文件不存在,则创建
// 注意:sqlite中这个文件就是一个库
// 不支持多线程访问,不支持多实例访问
SQLITE_API int sqlite3_open(
  const char*filename,   /* Database filename (UTF-8)*/
  sqlite3**ppDb          /* OUT: SQLite db handle*/
);
SQLITE_API int sqlite3_open16(
  const void*filename,   /* Database filename (UTF-16)*/
  sqlite3**ppDb          /* OUT: SQLite db handle*/
);

// 关闭文件, Open之后一定要close
SQLITE_API int sqlite3_close(sqlite3*);

// 执行操作
SQLITE_API int sqlite3_exec(
  sqlite3*,                                  /* An open database*/
  const char*sql,                           /* SQL to be evaluated*/
  int (*callback)(void*,int,char**,char**),  /* Callback function*/
  void*,                                    /* 1st argument to callback*/
  char**errmsg                              /* Error msg written here*/
);

SQLITE_API int sqlite3_prepare(
  sqlite3*db,            /* Database handle*/
  const char*zSql,       /* SQL statement, UTF-8 encoded*/
  int nByte,              /* Maximum length of zSql in bytes.*/
  sqlite3_stmt**ppStmt,  /* OUT: Statement handle*/
  const char**pzTail     /* OUT: Pointer to unused portion of zSql*/
);

SQLITE_API int sqlite3_bind_blob(sqlite3_stmt*, int, const void*, int n, void(*)(void*));
SQLITE_API int sqlite3_bind_double(sqlite3_stmt*, int, double);
SQLITE_API int sqlite3_bind_int(sqlite3_stmt*, int, int);
SQLITE_API int sqlite3_bind_int64(sqlite3_stmt*, int, sqlite3_int64);
SQLITE_API int sqlite3_bind_null(sqlite3_stmt*, int);
SQLITE_API int sqlite3_bind_text(sqlite3_stmt*, int, const char*, int n, void(*)(void*));
SQLITE_API int sqlite3_bind_text16(sqlite3_stmt*, int, const void*, int, void(*)(void*));
SQLITE_API int sqlite3_bind_value(sqlite3_stmt*, int, const sqlite3_value*);
SQLITE_API int sqlite3_bind_zeroblob(sqlite3_stmt*, int, int n);

SQLITE_API int sqlite3_step(sqlite3_stmt*);
SQLITE_API int sqlite3_finalize(sqlite3_stmt*pStmt);

SQLITE_API const void*sqlite3_column_blob(sqlite3_stmt*, int iCol);
SQLITE_API int sqlite3_column_bytes(sqlite3_stmt*, int iCol);
SQLITE_API int sqlite3_column_bytes16(sqlite3_stmt*, int iCol);
SQLITE_API double sqlite3_column_double(sqlite3_stmt*, int iCol);
SQLITE_API int sqlite3_column_int(sqlite3_stmt*, int iCol);
SQLITE_API sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol);
SQLITE_API const unsigned char*sqlite3_column_text(sqlite3_stmt*, int iCol);
SQLITE_API const void*sqlite3_column_text16(sqlite3_stmt*, int iCol);
SQLITE_API int sqlite3_column_type(sqlite3_stmt*, int iCol);
SQLITE_API sqlite3_value*sqlite3_column_value(sqlite3_stmt*, int iCol);

SQLite 安装

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

在c++项目中使用 SQLite 操作数据库有两种方式,接下来分别讲两种方式:

源文件操作数据库

C++项目中,通过 调用 SQLite 源文件代码,实现操作 SQLite 数据库。 实现基本功能,包括创建数据库,打开连接数据库,建表,添加数据,关闭数据库的功能。

  1. 官网下载 sqlite源文件,创建 sqlite的文件夹,并将解压后的文件放入 sqlite的文件夹:
    SQLite安装与使用
  2. 用到以下几个文件,特别是 sqlite3.c sqlite3.h这两个文件。
    SQLite安装与使用
  3. vs2019新建 VC++解决方案,新增项目。
  4. sqlite的文件夹,内含头文件和源文件放到项目里。
  5. 将项目设置为多字节字符集,避免字符集带来的问题。
  6. 多字节字符集使用 sqlite3_open
  7. 宽字符集使用 sqlite3_open16
    SQLite安装与使用
  8. C/C++混合编程,编译报头文件错误, sqlite3.c设置不使用预编译头,或者编译成动态库载入
    SQLite安装与使用
  9. 引用头文件,创建 sqlite3对象,后续操作数据库都要用到
  10. 新建数据库, 此时可以看到项目目录下生成数据库文件。 注意:打开(连接)数据库,和新建是同一个函数,内部会判断是否存在,不存在会新建再打开,存在直接打开。
#include "sqlite3.h"
#include

int callback(void*, int argc, char* argv[], char* names[])
{
   for (int i = 0; i < argc; i++)
    {
        std::cout << names[i] << "= " << argv[i] << std::endl;
   }
    return 0;
}

int main()
{
    sqlite3* pdb = NULL;
    char* errMsg = NULL;
    int ret = sqlite3_open("edyun. db", &pdb);
    if (ret){
        std::cout << sqlite3_errmsg(pdb) << std::endl;
        return -1;
    else {
        std::cout << "open edyun.db success! \r\n";
    }

    const char* sql =
        "CREATE TABLE EDoYun(" \
        "ID     INT PRIMARY KEY NOT NULL,"\
        "NAME   TEXT            NOT NULL);";
    do {
        ret = sqlite3_exec(pdb, sql, NULL, NULL, &errMsg);
        if (ret != SQLITE_OK){
            std::cout<< errMsg << " return " << ret << std::endl;
            sqlite3_free(errMsg);
            break;
        } else {
            std::cout<< "create table EDoYun success!" << std::endl;
            break;
        }
        sql = "INSERT INTO EDoYun (ID,NAME)VALUES(1,\"jueding\");";
        ret = sqlite3_exec(pdb, sq, NULL, NULL, &errMsg);
        if (ret != SQLITE_OK){
            std::cout<< errMsg << " return " << ret << std::endl;
            sqlite3_free(errMsg);
            break;
        } else {
            std::cout << "insert table EDoYun success!" << std::endl;
        }

        sql = "SELECT * FROM EDoYun;";
        ret = sqlite3_exec(pdb, sql, callback, NULL, &errMsg);
        if (ret != SQLITE_OK){
            std::cout<< errMsg << " return " << ret << std::endl;
            sqlite3_free(errMsg);
            break;
        } else {
            std:: cout<< "insert table EDoYun success!" << std::endl;
        }
        sql = "DROP TABLE EDoYun;" ;
        ret = sqlite3_exec(pdb, sql, NULL, NULL, &errMsg);
        if (ret != SQLITE_OK){
            std::cout << errMsg << " return " << ret << std::endl;
            sqlite3_free(errMsg);
            break;
        } else {
            std::cout << " drop table EDoYun success!" << std::endl;
        }
    } while (false);

    sqlite3_close(pdb);
}

SQLite安装与使用

动态库操作数据库

通过 调用 sqlite 动态库,实现操作 sqlite 数据库,实现 基本功能,包括创建数据库,打开连接数据库,建表,添加数据,关闭数据库的功能。由 vs2019创建的演示工程,在release文件夹下可以执行 .exe文件演示

Original: https://blog.csdn.net/weixin_45004203/article/details/122893252
Author: 源世界yu
Title: SQLite安装与使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/816170/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Ubuntu 安装k8s集群

    镜像下载、域名解析、时间同步请点击阿里云开源镜像站 前言 本文介绍如何在ubuntu上部署k8s集群,大致可以分为如下几个步骤 修改ubuntu配置 安装docker 安装kube…

    大数据 2023年5月27日
    051
  • docker 搭建私服仓库

    1.搭建私服 1.1 拉取 registry 镜像 docker pull registry 1.2 启动私有仓库镜像 docker run –name localre…

    大数据 2023年5月26日
    072
  • RabbitMQ 3.9( 基础 )

    404. 抱歉,您访问的资源不存在。 [TencentCloudSDKException] code:FailedOperation.ServiceIsolate message:…

    大数据 2023年6月3日
    074
  • Linux(centos)安装jdk

    Linux安装jdk 这里以centos7系统为例 01.卸载openjdk 由于centos默认安装的是openjdk,所以安装前需要彻底清理下openjdk。 a.查看已安装的…

    大数据 2023年6月3日
    085
  • Redis管理及监控工具推荐

    推荐一款Redis管理软件。【官网 http://www.redisant.cn/】 功能描述: 键和字段CRUD和glob。 适用于字符串、列表、散列、集合、有序集合。 通过漂亮…

    大数据 2023年6月3日
    090
  • Hive sql 每天场景题 41

    41、现有各直播间的用户访问记录表(live_events)如下,表中每行数据表达的信息为,一个用户何时进入了一个直播间,又在何时离开了该直播间 户访问记录表(live_event…

    大数据 2023年11月12日
    040
  • SQLite数据库

    数据(Data) 能够输入计算机并能被计算机程序识别和处理的信息集合 数据库 (Database) 数据库是在数据库管理系统管理和控制之下,存放在存储介质上的数据集合 常用的数据库…

    大数据 2023年11月11日
    036
  • 一个docker容器中运行多个服务还是弄一堆docker容器运行?

    不建议直接在单个 Docker 容器中运行多个程序。 以 2017年 10 月18 日 Docker 官方支持 Kubernetes 为分水岭计算,Kubernetes 赢得容器编…

    大数据 2023年5月29日
    0101
  • 为BlueLake主题增加图片放大效果

    fancyBox 是一个流行的媒体展示增强组件,可以方便为网站添加图片放大、相册浏览、视频弹出层播放等效果。优点有使用简单,支持高度自定义,兼顾触屏、响应式移动端特性,总之使用体验…

    大数据 2023年6月3日
    0102
  • PyTorch基础(part4)

    PyTorch基础(part4) 原创 GoatGui2022-06-02 20:55:30博主文章分类:深度学习 ©著作权 文章标签 pytorch python 人工智能 数据…

    大数据 2023年5月26日
    075
  • JVM调优常用命令

    1.查看java进程,jps命令可以列出正在运行的虚拟机进程 2.查看flume进程java虚拟机的统计信息 某springboot web服务进程java虚拟机的统计信息 对应指…

    大数据 2023年5月28日
    072
  • zabbix6.0升级教程(二):源码包升级

    zabbix6.0升级教程(二):源码包升级 Zabbix 6.0升级教程分为两篇,分别介绍二进制包升级及源码包升级。本篇为第二篇,介绍提供使用官方 Zabbix 源码包从 Zab…

    大数据 2023年11月11日
    053
  • VS2019+windows10+编译GDAL3.5.1+SQLite3+Proj8+GEOS3.10

    VS2019+windows10+编译GDAL3.5.1+SQLite3+Proj8+GEOS3.10 1、编译 * 2、编译过程 3、测试 4、参考文章 4、编译文件链接 1、编…

    大数据 2023年11月11日
    051
  • 【SpringBoot实战】核心配置和注解

    前言 SpringBoot核心配置在springboot中有非常重要的作用,我们可是使用核心配置文件进行一些基础功能的定义,属性值的注入等。springboot支持两种格式的核心配…

    大数据 2023年6月3日
    0100
  • TRRUST:人和小鼠的转录因子调控网络数据库

    欢迎关注”生信修炼手册”! TRRUST数据库是一个记录转录因子调控关系的数据库,不仅包含转录因子对应的靶基因,也包含了转录因子间的调控关系。目前该数据库只…

    大数据 2023年5月26日
    0112
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球