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() 的呼叫中。