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 */ ); int sqlite3_prepare_v3( sqlite3 *db, /* Database handle */ const char *zSql, /* SQL statement, UTF-8 encoded */ int nByte, /* Maximum length of zSql in bytes. */ unsigned int prepFlags, /* Zero or more SQLITE_PREPARE_ flags */ sqlite3_stmt **ppStmt, /* OUT: Statement handle */ const char **pzTail /* OUT: Pointer to unused portion of zSql */ ); int sqlite3_prepare16( sqlite3 *db, /* Database handle */ const void *zSql, /* SQL statement, UTF-16 encoded */ int nByte, /* Maximum length of zSql in bytes. */ sqlite3_stmt **ppStmt, /* OUT: Statement handle */ const void **pzTail /* OUT: Pointer to unused portion of zSql */ ); int sqlite3_prepare16_v2( sqlite3 *db, /* Database handle */ const void *zSql, /* SQL statement, UTF-16 encoded */ int nByte, /* Maximum length of zSql in bytes. */ sqlite3_stmt **ppStmt, /* OUT: Statement handle */ const void **pzTail /* OUT: Pointer to unused portion of zSql */ ); int sqlite3_prepare16_v3( sqlite3 *db, /* Database handle */ const void *zSql, /* SQL statement, UTF-16 encoded */ int nByte, /* Maximum length of zSql in bytes. */ unsigned int prepFlags, /* Zero or more SQLITE_PREPARE_ flags */ sqlite3_stmt **ppStmt, /* OUT: Statement handle */ const void **pzTail /* OUT: Pointer to unused portion of zSql */ );
要執行 SQL 陳述式,必須先使用以下其中一個函式將其編譯成位元組碼程式。換句話說,這些函式是用於建構 已準備好的陳述式 (預編譯語句) 物件的建構子。
建議使用的函式是 sqlite3_prepare_v2()。sqlite3_prepare() 介面是舊版函式,應避免使用。sqlite3_prepare_v3() 有一個額外的 "prepFlags" 選項,用於特殊用途。
建議使用 UTF-8 介面,因為 SQLite 目前使用 UTF-8 進行所有解析。提供 UTF-16 介面是為了方便起見。UTF-16 介面會將輸入文字轉換為 UTF-8,然後呼叫對應的 UTF-8 介面。
第一個參數 "db" 是先前成功呼叫 sqlite3_open()、sqlite3_open_v2() 或 sqlite3_open16() 所取得的 資料庫連線 (數據庫連接)。資料庫連線不得已關閉。
第二個參數 "zSql" 是要編譯的陳述式,以 UTF-8 或 UTF-16 編碼。sqlite3_prepare()、sqlite3_prepare_v2() 和 sqlite3_prepare_v3() 介面使用 UTF-8,而 sqlite3_prepare16()、sqlite3_prepare16_v2() 和 sqlite3_prepare16_v3() 使用 UTF-16。
如果 nByte 參數為負值,則 zSql 會讀取到第一個零終止符。如果 nByte 為正值,則它是從 zSql 讀取的位元組數。如果 nByte 為零,則不會產生已準備好的陳述式。如果呼叫者知道提供的字串是以 null 終止的,那麼傳遞一個包含 null 終止符的輸入字串位元組數的 nByte 參數會稍微提高效能。
如果 pzTail 不為 NULL,則 *pzTail 會指向 zSql 中第一個 SQL 陳述式結束後的下一個位元組。這些函式只會編譯 zSql 中的第一個陳述式,因此 *pzTail 會指向未編譯的剩餘部分。
*ppStmt 會指向一個已編譯的 已準備好的陳述式 (預編譯語句),可以使用 sqlite3_step() 執行它。如果發生錯誤,*ppStmt 會設定為 NULL。如果輸入文字不包含 SQL(如果輸入是空字串或註釋),則 *ppStmt 會設定為 NULL。呼叫程序負責在使用完已編譯的 SQL 陳述式後,使用 sqlite3_finalize() 將其刪除。ppStmt 不可為 NULL。
成功時,sqlite3_prepare() 系列函式會傳回 SQLITE_OK;否則會傳回 錯誤碼 (錯誤代碼)。
建議所有新程式都使用 sqlite3_prepare_v2()、sqlite3_prepare_v3()、sqlite3_prepare16_v2() 和 sqlite3_prepare16_v3() 介面。保留舊版介面(sqlite3_prepare() 和 sqlite3_prepare16())是為了向後相容,但不建議使用它們。在 "vX" 介面中,傳回的已準備好的陳述式(sqlite3_stmt 物件)包含原始 SQL 文字的副本。這會導致 sqlite3_step() 介面的行為在三個方面有所不同
sqlite3_prepare_v3() 與 sqlite3_prepare_v2() 的不同之處僅在於它具有額外的 prepFlags 參數,該參數是一個由零個或多個 SQLITE_PREPARE_* 旗標組成的位元陣列。sqlite3_prepare_v2() 介面的運作方式與 prepFlags 參數為零的 sqlite3_prepare_v3() 完全相同。