sqlite 句柄-sqlite 基础教程(3)

2023-05-16

要操纵一个数据库你就得有一个这个数据库的句柄(又碰到这个难以理解的词了,不过确实还没得一个更好的词来替代它)。其实你跟本不需要去在乎这个词叫什么,你只要搞清楚他是一个什么玩意儿。就如同鞋子为什么叫鞋子,仔细想想确实也难以理解,不过 清楚他的功能就OK了,不是吗?

句柄在很多地方我们见到过,最常见的就是文件的句柄,我们要操纵一个文件,我们就要取得一个文件的句柄。句柄是个什么东东呢?其实很简单,句柄是一个东东的描述,他被定义为一个结构体,这个结构体可能会包含要描述的东东的具体信息,比如位置、大小、类型等等。我们有了这个描述信息我们就能去找到这个东东,然后操纵它。

一句话:句柄是物体的描述结构体。

我们来看看sqlite的句柄是怎么定义的(不要被吓到了,代码直接跳过就好):

[java]  view plain copy print ?
  1. struct sqlite3 {  
  2.   sqlite3_vfs *pVfs;            /* OS Interface */  
  3.   int nDb;                      /* Number of backends currently in use */  
  4.   Db *aDb;                      /* All backends */  
  5.   int flags;                    /* Miscellaneous flags. See below */  
  6.   unsigned int openFlags;       /* Flags passed to sqlite3_vfs.xOpen() */  
  7.   int errCode;                  /* Most recent error code (SQLITE_*) */  
  8.   int errMask;                  /* & result codes with this before returning */  
  9.   u8 autoCommit;                /* The auto-commit flag. */  
  10.   u8 temp_store;                /* 1: file 2: memory 0: default */  
  11.   u8 mallocFailed;              /* True if we have seen a malloc failure */  
  12.   u8 dfltLockMode;              /* Default locking-mode for attached dbs */  
  13.   signed char nextAutovac;      /* Autovac setting after VACUUM if >=0 */  
  14.   u8 suppressErr;               /* Do not issue error messages if true */  
  15.   u8 vtabOnConflict;            /* Value to return for s3_vtab_on_conflict() */  
  16.   int nextPagesize;             /* Pagesize after VACUUM if >0 */  
  17.   int nTable;                   /* Number of tables in the database */  
  18.   CollSeq *pDfltColl;           /* The default collating sequence (BINARY) */  
  19.   i64 lastRowid;                /* ROWID of most recent insert (see above) */  
  20.   u32 magic;                    /* Magic number for detect library misuse */  
  21.   int nChange;                  /* Value returned by sqlite3_changes() */  
  22.   int nTotalChange;             /* Value returned by sqlite3_total_changes() */  
  23.   sqlite3_mutex *mutex;         /* Connection mutex */  
  24.   int aLimit[SQLITE_N_LIMIT];   /* Limits */  
  25.   struct sqlite3InitInfo {      /* Information used during initialization */  
  26.     int iDb;                    /* When back is being initialized */  
  27.     int newTnum;                /* Rootpage of table being initialized */  
  28.     u8 busy;                    /* TRUE if currently initializing */  
  29.     u8 orphanTrigger;           /* Last statement is orphaned TEMP trigger */  
  30.   } init;  
  31.   int nExtension;               /* Number of loaded extensions */  
  32.   void **aExtension;            /* Array of shared library handles */  
  33.   struct Vdbe *pVdbe;           /* List of active virtual machines */  
  34.   int activeVdbeCnt;            /* Number of VDBEs currently executing */  
  35.   int writeVdbeCnt;             /* Number of active VDBEs that are writing */  
  36.   int vdbeExecCnt;              /* Number of nested calls to VdbeExec() */  
  37.   void (*xTrace)(void*,const char*);        /* Trace function */  
  38.   void *pTraceArg;                          /* Argument to the trace function */  
  39.   void (*xProfile)(void*,const char*,u64);  /* Profiling function */  
  40.   void *pProfileArg;                        /* Argument to profile function */  
  41.   void *pCommitArg;                 /* Argument to xCommitCallback() */     
  42.   int (*xCommitCallback)(void*);    /* Invoked at every commit. */  
  43.   void *pRollbackArg;               /* Argument to xRollbackCallback() */     
  44.   void (*xRollbackCallback)(void*); /* Invoked at every commit. */  
  45.   void *pUpdateArg;  
  46.   void (*xUpdateCallback)(void*,intconst char*,const char*,sqlite_int64);  
  47. #ifndef SQLITE_OMIT_WAL  
  48.   int (*xWalCallback)(void *, sqlite3 *, const char *, int);  
  49.   void *pWalArg;  
  50. #endif  
  51.   void(*xCollNeeded)(void*,sqlite3*,int eTextRep,const char*);  
  52.   void(*xCollNeeded16)(void*,sqlite3*,int eTextRep,const void*);  
  53.   void *pCollNeededArg;  
  54.   sqlite3_value *pErr;          /* Most recent error message */  
  55.   char *zErrMsg;                /* Most recent error message (UTF-8 encoded) */  
  56.   char *zErrMsg16;              /* Most recent error message (UTF-16 encoded) */  
  57.   union {  
  58.     volatile int isInterrupted; /* True if sqlite3_interrupt has been called */  
  59.     double notUsed1;            /* Spacer */  
  60.   } u1;  
  61.   Lookaside lookaside;          /* Lookaside malloc configuration */  
  62. #ifndef SQLITE_OMIT_AUTHORIZATION  
  63.   int (*xAuth)(void*,int,const char*,const char*,const char*,const char*);  
  64.                                 /* Access authorization function */  
  65.   void *pAuthArg;               /* 1st argument to the access auth function */  
  66. #endif  
  67. #ifndef SQLITE_OMIT_PROGRESS_CALLBACK  
  68.   int (*xProgress)(void *);     /* The progress callback */  
  69.   void *pProgressArg;           /* Argument to the progress callback */  
  70.   int nProgressOps;             /* Number of opcodes for progress callback */  
  71. #endif  
  72. #ifndef SQLITE_OMIT_VIRTUALTABLE  
  73.   Hash aModule;                 /* populated by sqlite3_create_module() */  
  74.   VtabCtx *pVtabCtx;            /* Context for active vtab connect/create */  
  75.   VTable **aVTrans;             /* Virtual tables with open transactions */  
  76.   int nVTrans;                  /* Allocated size of aVTrans */  
  77.   VTable *pDisconnect;    /* Disconnect these in next sqlite3_prepare() */  
  78. #endif  
  79.   FuncDefHash aFunc;            /* Hash table of connection functions */  
  80.   Hash aCollSeq;                /* All collating sequences */  
  81.   BusyHandler busyHandler;      /* Busy callback */  
  82.   int busyTimeout;              /* Busy handler timeout, in msec */  
  83.   Db aDbStatic[2];              /* Static space for the 2 default backends */  
  84.   Savepoint *pSavepoint;        /* List of active savepoints */  
  85.   int nSavepoint;               /* Number of non-transaction savepoints */  
  86.   int nStatement;               /* Number of nested statement-transactions  */  
  87.   u8 isTransactionSavepoint;    /* True if the outermost savepoint is a TS */  
  88.   i64 nDeferredCons;            /* Net deferred constraints this transaction. */  
  89.   int *pnBytesFreed;            /* If not NULL, increment this in DbFree() */  
  90.   
  91. #ifdef SQLITE_ENABLE_UNLOCK_NOTIFY  
  92.   /* The following variables are all protected by the STATIC_MASTER  
  93.   ** mutex, not by sqlite3.mutex. They are used by code in notify.c.  
  94.   ** 
  95.   ** When X.pUnlockConnection==Y, that means that X is waiting for Y to 
  96.   ** unlock so that it can proceed. 
  97.   ** 
  98.   ** When X.pBlockingConnection==Y, that means that something that X tried 
  99.   ** tried to do recently failed with an SQLITE_LOCKED error due to locks 
  100.   ** held by Y. 
  101.   */  
  102.   sqlite3 *pBlockingConnection; /* Connection that caused SQLITE_LOCKED */  
  103.   sqlite3 *pUnlockConnection;           /* Connection to watch for unlock */  
  104.   void *pUnlockArg;                     /* Argument to xUnlockNotify */  
  105.   void (*xUnlockNotify)(void **, int);  /* Unlock notify callback */  
  106.   sqlite3 *pNextBlocked;        /* Next in list of all blocked connections */  
  107. #endif  
  108. };  

[java]  view plain copy print ?
  1. typedef struct sqlite3 sqlite3;//  

是不是被吓到了,没关系,这段代码本来就是我贴出来吓唬你的,我也没认真研究过这个代码,也不想去研究,除非哪天有人出高价请我去研究,我现在只知道怎么用就好了。

这个 sqlite3 结构体就是被用来描述我们磁盘里的数据库文件的,有了这个描述符我们就可以对这个数据库进行各种操作了,操作的具体内情我们不必要了解,我们只需要知道怎么去调用API就好了,当然有时候还是要了解一点点内情的,这个以后碰到再讲。

我用这么长的话加一大段吓人的代码只有一个目的:不要对句柄有恐惧感。

好了,开始我们的正题,sqlite 里面你要操纵数据库我们先得创建一个句柄,然后后面所有对数据库得操作都会用到这个句柄。

[java]  view plain copy print ?
  1. sqlite3* pdb;  
就 这么简单,这样一个ssqlite的句柄我们就创建完成了,我们以后针对数据库的操作都离不开它了。你可能还有疑问,我也知道你的 疑问是什么,请看下回分解。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sqlite 句柄-sqlite 基础教程(3) 的相关文章

  • Git基础教程(二)

    使用Git删除文件 1 直接删除 可以使用rm命令删除文件 xff0c 如 xff1a rm welcome html 然后查看一下状态 xff1a 然后发现welcome html的状态为deleted xff0c 如果你真的想在git管
  • Git基础教程(三)

    Git分支 在git中使用分支非常简单 xff0c 只需要使用Git branch命令即可 xff1a git branch test 新建test分支 此时使用git branch查看一下分支 xff1a 此时的确多了一个分支 xff0c
  • Git基础教程(四)

    工作做到一半需要临时切换到别的任务 1 先commit当前的进度 简单的做法先保存当前的修改 然后切换到有问题的分级 xff0c 先完成别的功能 xff0c 然后切换回原来做到一半的develop分支 xff0c 执行reset命令 xff
  • jupyter notebook matplotlib绘制动态图并显示在notebook中

    有些时候matplotlib 的绘图没法显示在notebook中 xff0c 或者显示不了 这与backend有关 首先启动你的notebook xff0c 输入 pylab 查看你的matplotlib后端 xff0c 我的输出为 xff
  • 主机连接wifi,如何设置虚拟机上网方式

    主机是windows系统 xff08 win7 xff0c win10 xff09 xff0c 如果使用wifi上网 xff0c 虚拟机如何设置 xff1f xff1f 首先打开主机网络 xff08 如下所示 xff09 xff1a 1 点
  • VS2015断点调试方法

    备注 xff1a 部分图片 xff08 打马赛克的 xff09 转自百度 xff0c 侵删 xff01 果真被和谐了 xff0c 大家还是看这个网页吧 xff1a https jingyan baidu com album e75057f2
  • FreeRTOS 源代码的编程标准与命名约定

    一 编程标准 xff08 Coding Standard xff09 FreeRTOS 源代码遵守 MISRA Motor Industry Software Reliability Association 规范 与 MISRA 标准有出入
  • 特征匹配中OpenCV Dmatch类的用法解析以及非常详细的ORB特征提取与匹配解析

    首先说明一点 xff0c 在SLAM中进行特征提取和匹配时 xff0c 需要注意使用的OpenCV版本 xff0c 在使用OpenCV2 x版本时 xff0c 可以创建特征对象如下所示 xff08 省略了参数表 xff09 xff1a OR
  • 单目视觉里程计的尺度问题的疑问?

    SLAM是个坑 经过一段时间对SLAM的了解 xff0c 原来是我理解有错误 xff0c 得到的尺度已经是统一的 xff0c 只是不知道它的真实尺度是多少 贴一个不错的视觉里程计简介的链接 xff1a https blog csdn net
  • 使用ORB_SLAM2的方式进行特征检测和提取

    比较opencv默认的方式和ORB SLAM2中对opencv进行重写的方式 xff0c 两个方法对图像特征提取结果的对比 为方便比较 xff0c 写在同一个文件中 主函数如下 xff1a include lt iostream gt in
  • 什么是归一化的平面坐标

    所谓的归一化的成像平面 xff0c 就是将三维空间点的坐标都除以Z 所有空间点坐标都转到了相机前单位距离处 xff0c 这个平面就叫归一化的平面 xff0c 之后再乘以焦距 f f f xff0c 让归一化平面回到成像平面 以一张别的博主做
  • 无人机编程实战第1讲——无人机简介

    目录 前言 一 飞控是什么 xff1f 二 扫盲行动 xff01 xff01 xff01 1 微控制器 2 传感器 3 处理 xff1f 4 无人机飞行姿态 总结 前言 随着开源无人机飞行控制器的不断发展 xff0c 越来越多优秀的代码与算
  • 阿里云Serverless kubernetes服务购买体验

    阿里云Serverless kubernetes服务购买体验 Serverless kubernetes是什么优点缺点体验步骤价格ECI的价格 xff1a ECS的价格 阿里云Serverless Kubernetes支持列表总结 Serv
  • python修改xml文件内容,不废话,拿来即用

    XML 被设计用来传输和存储数据 HTML 被设计用来显示数据 XML 指可扩展标记语言 xff08 eXtensible Markup Language xff09 可扩展标记语言 xff08 英语 xff1a Extensible Ma
  • mysql如何删除数据表,被关联的数据表如何删除呢

    删除数据表的时候 xff0c 表的定义和表中所有的数据均会被删除 因此 xff0c 在进行删除操作前 xff0c 最好对表中的数据做一个备份 xff0c 以免造成无法挽回的后果 mysql删除数据表分为两种情况 xff1b mysql删除没
  • mysql8.0新特性-自增变量的持久化

    在mysql8 0之前 xff0c 自增主键AUTO INCREMENT的值如果大于max primay key 43 1 xff0c 在mysql重启后 xff0c 会重置AUTO INCREMENT 61 max primay key
  • 双系统重装Ubuntu20.04及系统基本配置

    文章目录 前言Ubuntu20 04换源安装chrome浏览器安装OneNote安装Wechat QQ Dingtalk参考 前言 笔者从2019年9月份去长沙智能驾驶研究院开始接触ubuntu18 04 在2020年4月份做本科毕业设计的
  • 视觉 SLAM 十四讲 —— 第十三讲 建图

    视觉 SLAM 十四讲 第十三讲 建图 在前端和后端中 xff0c 我们重点关注同时估计相机运动轨迹与特征点空间位置的问题 然而 xff0c 在实际使用 SLAM 时 xff0c 除了对相机本体进行定位之外 xff0c 还存在许多其他的需求
  • mysql中数据表的基本操作很难嘛,由这个实验来带你从头走一遍

    mysql表中数据表的各种操作 xff0c 创建表 添加各类约束 查看表结构 修改和删除表 这次带你捋清楚 xff0c 从头再走一遍 实验目的 创建 修改和删除表 xff0c 掌握数据表的基本操作 实验结果 创建数据库company xff
  • nginx自动摘除和恢复后端服务,进行自动检测

    主动地健康检查 xff0c nginx定时主动地去ping后端的服务列表 xff0c 当发现某服务出现异常时 xff0c 把该服务从健康列表中移除 xff0c 当发现某服务恢复时 xff0c 又能够将该服务加回健康列表中 nginx自带的u

随机推荐

  • nginx中配置root和alias的区别

    在nginx中 xff0c root和alias都可以代理静态资源 xff0c 那么他们两个有什么区别呢 xff1f 在什么情况下使用什么呢 初识 xff1a root和alias都可以在定义在location模块中 xff0c 都是用来请
  • 史上最全的mysql数据类型汇总-(上)

    mysql支持多种数据类型 xff0c 主要有数值类型 日期 时间类型以及字符串类型 整数类型 数值型数据类型主要用来存储数字 xff0c mysql提供了多种数值数据类型 xff0c 不同的数据类型提供不同的取值范围 xff0c 可以存储
  • 史上最全的mysql数据类型汇总(下)

    接着上文继续来梳理 xff0c 上文我们写到了日期与时间类型中的time类型 xff0c 然后我们接着来写日期与时间类型中的date类型 date类型 date类型用在仅需要日期值时 xff0c 没有时间部分 xff0c 在存储时需要3字节
  • mysql中的字段如何选择合适的数据类型呢?

    前面两篇我们介绍了很多种数据类型 xff0c 那么有没有看花眼呢 xff0c 我们在mysql中创建数据表的时候 xff0c 到底应该选择哪一种数据类型呢 xff1f 这次我们就来简单的梳理一下子把 准则 我们不论要如何创建数据表 xff0
  • mysql中的四大运算符种类汇总20多项,用了三天三夜来整理的,还不赶快收藏

    运算符连接表达式中的各个操作数 xff0c 他的作用是用来指明对数据表中的操作数所进行的运算 运用运算法有什么好处呢 xff1f 运用运算符可以更加灵活的使用表中的数据 xff0c 我们可以通过使用运算符来解决我们的很多问题 xff0c 大
  • mysql函数汇总之数学函数

    什么是mysql函数 xff1f 61 61 61 61 61 61 61 61 61 61 61 61 61 61 函数表示对输入参数值返回一个具有特定关系的值 xff0c mysql提供了大量丰富的函数 xff0c 在进行数据库管理以及
  • mysql函数汇总之字符串函数

    字符串函数主要用来处理数据库中的字符串数据 mysql中的字符串函数有计算字符串长度函数 字符串合并函数 字符串替换函数 字符串比较函数 查找指定字符串位置函数等 计算字符串字符数的函数 CHAR LENGTH str 函数计算字符串str
  • mysql函数汇总之日期和时间函数

    日期和时间函数主要用来处理日期和时间值 xff0c 一般的日期函数除了使用date类型的参数外 xff0c 也可以使用datetime或者timestamp类型的参数 xff0c 但会忽略这些值的时间部分 获取当前日期的函数 curdate
  • [ Ubuntu 使用技巧 ] 在当前工作目录打开 Terminal

    1 General Purposes Why I wrote this 在 Ubuntu 系统开发最舒服的一点就是可以开心地使用 Terminal 这是个好东西 xff0c 尤其当你熟悉大部分的常用命令之后 xff0c 对日常的代码工作还有
  • mysql函数汇总之条件判断函数

    条件判断函数也被称为控制流程函数 xff0c 根据满足的不同条件 xff0c 执行响应的流程 mysql中进行条件判断的函数有if ifunll和case等 IF expr v1 v2 函数 IF expr v1 v2 xff1a 如果表达
  • mysql函数汇总之系统信息函数

    mysql的系统信息有数据库的版本号 当前用户名和连接数 系统字符集 最后一个自动生成的ID值等 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61
  • mysql数据库中的数据如何加密呢?mysql8.0自带新特性

    61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61
  • mysql还有哪些自带的函数呢?别到处找了,看这个就够了。

    格式化函数FPRMAT x n format x n 将数字x进行格式化 xff0c 并以四舍五入的方式保留小数点后n位 xff0c 结果以字符串的形式返回 如果n为0 xff0c 则返回结果函数不含小数部分 mysql gt select
  • mysql中还有窗口函数?这是什么东西?

    什么是窗口函数 xff1f 在mysql8 0的版本中 xff0c 新增了一个窗口函数 xff0c 用他可以实现很多新的查询方式 窗口函数类似于sun count 那样的集合函数 xff0c 但它并不会将多行查询结果合并为一行 xff0c
  • 记一次mysql查询慢的优化历程

    有一个项目 xff0c 代称cc xff0c 用了我们公司的产品 xff0c 单表数据量在200万左右 在做业务操作的时候 xff0c 点击一下按钮 xff0c 需要等待2 3分钟 及其难以忍受 xff0c 特此让我们修改 PS xff1a
  • configure: error: No curses library functions found

    centos上编译程序报错如下 xff1a configure error No curses library functions found 这个错误是因为缺少 curses 库导致的 在CentOS 7中 xff0c 可以通过以下命令安
  • STM32使用内部RC振荡器作为系统时钟开发项目--内晶振启动模板工程

    STM32使用内部RC振荡器时 xff0c OSC32 IN xff0c OSC32 OUT接法 xff1a 1 xff09 对于100脚或144脚的产品 xff0c OSC IN应接地 xff0c OSC OUT应悬空 2 xff09 对
  • 项目笔记(6):阿里云的Iot Studio和web可视化

    项目笔记 xff08 4 xff09 阿里云物联网的自定义主题和物联网模型
  • k-近邻算法实现手写数字识别系统

    k 近邻算法实现手写数字识别系统 一 实验介绍 1 1 实验内容 本实验将会从电影题材分类的例子入手 xff0c 详细讲述k 近邻算法的原理 在这之后 xff0c 我们将会使用该算法实现手写数字识别系统 1 2 课程来源 本课程源自 图灵教
  • sqlite 句柄-sqlite 基础教程(3)

    要操纵一个数据库你就得有一个这个数据库的句柄 又碰到这个难以理解的词了 xff0c 不过确实还没得一个更好的词来替代它 其实你跟本不需要去在乎这个词叫什么 xff0c 你只要搞清楚他是一个什么玩意儿 就如同鞋子为什么叫鞋子 xff0c 仔细