小巧、快速、可靠。
選擇其中三項。

SQLite C 介面

簡化查詢的便利函式 (Convenience Routines For Running Queries)

int sqlite3_get_table(
  sqlite3 *db,          /* An open database */
  const char *zSql,     /* SQL to be evaluated */
  char ***pazResult,    /* Results of the query */
  int *pnRow,           /* Number of result rows written here */
  int *pnColumn,        /* Number of result columns written here */
  char **pzErrmsg       /* Error msg written here */
);
void sqlite3_free_table(char **result);

這是一個為了向下相容而保留的舊版介面。不建議使用此介面。

定義:結果表格是由 sqlite3_get_table() 介面建立的記憶體資料結構。結果表格記錄了一個或多個查詢的完整查詢結果。

表格概念上具有若干行和列。但這些數字並不是結果表格本身的一部分。這些數字是另外取得的。設 N 為列數,M 為行數。

結果表格是一個指向以零結尾的 UTF-8 字串的指標陣列。陣列中有 (N+1)*M 個元素。前 M 個指標指向包含欄位名稱的以零結尾的字串。其餘的項目都指向查詢結果。NULL 值會產生 NULL 指標。所有其他值都是由 sqlite3_column_text() 返回的 UTF-8 零結尾字串表示形式。

結果表格可能由一個或多個記憶體配置組成。將結果表格直接傳遞給 sqlite3_free() 是不安全的。應使用 sqlite3_free_table() 釋放結果表格。

作為結果表格格式的範例,假設查詢結果如下:

Name        | Age
-----------------------
Alice       | 43
Bob         | 28
Cindy       | 21

有兩欄 (M==2) 和三列 (N==3)。因此,結果表格有 8 個項目。假設結果表格儲存在名為 azResult 的陣列中。則 azResult 包含以下內容:

azResult[0] = "Name";
azResult[1] = "Age";
azResult[2] = "Alice";
azResult[3] = "43";
azResult[4] = "Bob";
azResult[5] = "28";
azResult[6] = "Cindy";
azResult[7] = "21";

sqlite3_get_table() 函式會評估其第二個參數的以零結尾的 UTF-8 字串中的一個或多個以分號分隔的 SQL 陳述式,並將結果表格返回到其第三個參數中給定的指標。

應用程式使用 sqlite3_get_table() 的結果完成後,必須將結果表格指標傳遞給 sqlite3_free_table(),才能釋放已配置的記憶體。由於 sqlite3_get_table() 內部 sqlite3_malloc() 的方式,呼叫函式不得嘗試直接呼叫 sqlite3_free()。只有 sqlite3_free_table() 才能正確且安全地釋放記憶體。

sqlite3_get_table() 介面是作為 sqlite3_exec() 的包裝器實現的。sqlite3_get_table() 常式無法存取 SQLite 的任何內部資料結構。它僅使用此處定義的公共介面。因此,在內部 sqlite3_exec() 呼叫之外的包裝器層中發生的錯誤不會反映在後續對 sqlite3_errcode()sqlite3_errmsg() 的呼叫中。

另請參閱物件常數函式的列表。