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():編譯時鈎子,對數據庫一切事件的細粒度控制,能限制對數據庫、表、列的訪問和修改。

 使用線程

  共享緩存模式

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM