日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Sqlite3_prepare

發布時間:2023/12/10 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Sqlite3_prepare 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這個函數將sql文本轉換成一個準備語句(prepared statement)對象,同時返回這個對象的指針。這個接口需要一個數據庫連接指針以及一個要準備的包含SQL語句的文本。它實際上并不執行(evaluate)這個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編碼

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

pzTail:上面提到zSql在遇見終止符或者是達到設定的nByte之后結束,假如zSql還有剩余的內容,那么這些剩余的內容被存放到pZTail中,不包括終止符

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

?

說明

如果執行成功,則返回SQLITE_OK,否則返回一個錯誤碼。推薦在現在任何的程序中都使用sqlite3_prepare_v2這個函數,sqlite3_prepare只是用于前向兼容

?

備注

<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_*()來給這些參數綁定值

總結

以上是生活随笔為你收集整理的Sqlite3_prepare的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。