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():编译时钩子,对数据库一切事件的细粒度控制,能限制对数据库、表、列的访问和修改。

 使用线程

  共享缓存模式

 

posted on 2018-07-26 13:44  mofei004  阅读(1686)  评论(0编辑  收藏  举报

导航