• sqlite3-第五章 API-核心API


    DBMS:database management system,数据库管理系统

    VDBE: virtual database engine, 虚拟数据库引擎

    VM: virtual machine, 虚拟机

    frontend:前端

    bytecode programs:字节代码程序

    核心API

    连接数据库

      sqlite3_open()

    执行预查寻

    • 准备
    • 执行
    • 完成

    使用参数化SQL

      insert into foods (id, name) values (?, ?);

      insert into episodes (id, name) values(:id, :name);

      参数就是占位符,可在编译后提供绑定。

      参数绑定的优点是无需重新编译,即可多次执行相同的语句。只需重置改语句、绑定新值,并重新执行。使用重置函数可以避免SQL编译的开销。完全避免此法分析、语法分析和代码生成开销。通过调用sqlite3_reset()实现重置。

      另一个优点是SQLite会处理绑定到参数的转义字符。可避免语法错误和可能的SQL注入式攻击。

      sqlite3_reset()只释放语句资源,会保持VDBE字节代码及其参数不变,sql语句无需再次调用prepare()即可再次执行。

    执行封装查询

      两个非常实用的函数分装了准备查询过程。

      sqlite3_exec();    通常用于执行不返回数据的查询。如insert、update、delete。

      sqlite3_get_table();  通常用于执行返回数据的查询。可查询多个表,会返回完整的结果集。

      get_table()的优点是一步就可执行查询并获得结果。缺点是它将结果完全存储在内存中。3.24版本中在推荐此函数,但是没说用哪个函数替代。

    错误处理

      sqlite3_errcode()

      sqlite3_errmsg()

      sqlite3_errmsg16()

      sqlite3_errstr()

      

    SQL语句格式化

      sqlite3_mprintf()

      sqlite3支持printf()中大多数常见格式选项,以及其他一些非标准的格式(%q, %Q, %w, %w)。

    例如%q,他会取代参数列表中以NULL结尾的字符串。同时他会将单引号字符转义,有助于防止SQL注入攻击。

    可操作的控制

      API中包含可以监视、控制或限制数据库汇总发生什么的命令。SQLite以过滤或者回调函数方式实现该功能。

      三种钩子函数:

    • sqlite3_commit_hook():用于检视连接上的事务提交;
    • sqlite3_rollback_hook():用于检视回滚;
    • sqlite3_update_hook():用于来自insert、update、delete命令的更改操作;
    • sqlite3_wal_hook():预写日志(Write Ahead Log, WAL),后面介绍。
    • sqlite3_set_authorizer():编译时钩子,对数据库一切事件的细粒度控制,能限制对数据库、表、列的访问和修改。

     使用线程

      共享缓存模式

  • 相关阅读:
    python 去除字符串两端字符串
    python 找到列表中满足某些条件的元素
    python join函数
    Ambiguous mapping. Cannot map "***Controller" been method解决办法
    uflo2安装与配置
    uflo2概述
    Mybatis-plus中的常用注解
    Spring Cloud Eureka配置文件详解 (还没细看)
    idea安装lombok
    PowerDesigner最基础的使用方法入门学习(一)
  • 原文地址:https://www.cnblogs.com/mofei004/p/9370892.html
Copyright © 2020-2023  润新知