Sqlite3_prepare

這個函數將sql文本轉換成一個準備語句(prepared statement)對象,同時返回這個對象的指針。這個接口須要一個數據庫鏈接指針以及一個要準備的包含SQL語句的文本。它實際上並不執行(evaluate)這個SQL語句,它僅僅爲執行準備這個sql語句sql

函數定義(僅列出UTF-8的)數據庫

int sqlite3_prepare(
  sqlite3 *db,            /* Database handle */
  const char *zSql,       /* SQL statement, UTF-8 encoded */
  int nByte,              /* Maximum length of zSql in bytes. */
  sqlite3_stmt **ppStmt,  /* OUT: Statement handle */
  const char **pzTail     /* OUT: Pointer to unused portion of zSql */
);
int sqlite3_prepare_v2(
  sqlite3 *db,            /* Database handle */
  const char *zSql,       /* SQL statement, UTF-8 encoded */
  int nByte,              /* Maximum length of zSql in bytes. */
  sqlite3_stmt **ppStmt,  /* OUT: Statement handle */
  const char **pzTail     /* OUT: Pointer to unused portion of zSql */
);

 參數:函數

db:數據指針編碼

zSql:sql語句,使用UTF-8編碼lua

nByte:若是nByte小於0,則函數取出zSql中從開始到第一個0終止符的內容;若是nByte不是負的,那麼它就是這個函數能從zSql中讀取的字節數的最大值。若是nBytes非負,zSql在第一次碰見’/000/或’u000’的時候終止spa

pzTail:上面提到zSql在碰見終止符或者是達到設定的nByte以後結束,假如zSql還有剩餘的內容,那麼這些剩餘的內容被存放到pZTail中,不包括終止符.net

ppStmt:可以使用sqlite3_step()執行的編譯好的準備語句的指針,若是錯誤發生,它被置爲NULL,如假如輸入的文本不包括sql語句。調用過程必須負責在編譯好的sql語句完成使用後使用sqlite3_finalize()刪除它。指針

 

說明code

若是執行成功,則返回SQLITE_OK,不然返回一個錯誤碼。推薦在如今任何的程序中都使用sqlite3_prepare_v2這個函數,sqlite3_prepare只是用於前向兼容sqlite

 

備註

<1>準備語句(prepared statement)對象

typedef struct sqlite3_stmt sqlite3_stmt;

        

準備語句(prepared statement)對象一個表明一個簡單SQL語句對象的實例,這個對象一般被稱爲「準備語句」或者「編譯好的SQL語句」或者就直接稱爲「語句」。

    語句對象的生命週期經歷這樣的過程:

l  使用sqlite3_prepare_v2或相關的函數建立這個對象

l  使用sqlite3_bind_*()給宿主參數(host parameters)綁定值

l  經過調用sqlite3_step一次或屢次來執行這個sql

l  使用sqlite3——reset()重置這個語句,而後回到第2步,這個過程作0次或屢次

l  使用sqlite3_finalize()銷燬這個對象

 

在sqlite中並無定義sqlite3_stmt這個結構的具體內容,它只是一個抽象類型,在使用過程當中通常以它的指針進行操做,而sqlite3_stmt類型的指針在其實是一個指向Vdbe的結構體得指針

<2>宿主參數(host parameters)

在傳給sqlite3_prepare_v2()的sql的語句文本或者它的變量中,知足以下模板的文字將被替換成一個參數:

l  ?

l  ?NNN,NNN表明數字

l  :VVV,VVV表明字符

l  @VVV

l  $VVV

在上面這些模板中,NNN表明一個數字,VVV表明一個字母數字標記符(例如:222表示名稱爲222的標記符),sql語句中的參數(變量)經過上面的幾個模板來指定,如

「select ? from ? 「這個語句中指定了兩個參數,sqlite語句中的第一個參數的索引值是1,這就知道這個語句中的兩個參數的索引分別爲1和2,使用」?」的話會被自動給予索引值,而使用」?NNN」則能夠本身指定參數的索引值,它表示這個參數的索引值爲NNN。」:VVV」表示一個名爲」VVV」的參數,它也有一個索引值,被自動指定。

可使用sqlite3_bind_*()來給這些參數綁定值

相關文章
相關標籤/搜索