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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 儿童穿和服过六一?官方回应:恶意剪辑 已
- 下一篇: 获取磁盘类型