sqlite3中有5種資料型別:int real text null blob
但sqlite3中的列的資料型別不是固定的,列的資料型別隨著實際插入的資料的格式而定;
在sqlite3中使用sql時,有乙個非常有趣而有強大的概念:相似型別。引入相似型別的概念,主要是為了相容各種資料庫(sqlserver oracle mysql等)的sql語法。
sqlite3中常用的幾個函式:
int sqlite3_open(const char * filepath,sqlite3 **ppdb)
開啟乙個資料庫連線,filepath就是資料庫檔案,如果資料庫檔案不存在,該函式會建立這個資料庫檔案。
ppdb是輸出引數,當成功建立資料庫連線時,(*ppdb)會指向乙個sqlite3物件;當建立資料庫連線失敗是,(*ppdb)為null。
當成功建立資料庫連線時,此函式返回sqlite_ok,否則返回錯誤代號。
開啟資料鏈結後,我們一般需要執行一些sql語句,在執行sql之前,需要編譯這些sql語句:
sqlite3_prepare_v2(sqlite3 *pdb, const char * psql, int nbytes, sqlite3_stmt **ppsamt, const char **ptail)
呼叫此函式時,我們一般將 nbytes設為-1,這表示我們希望編譯由psql指定的sql語句: psql開始到\0結尾的字串,該字串會被視為用utf-8編碼
而將**ptail設為null
ppstamt為輸出引數,當成功編譯sql語句時,(*ppstmt)會指向乙個sqlite3_stmt物件;當編譯sql語句失敗時,(*ppstmt)會被設為null。
pdb就是所代開的資料庫鏈結。
當成功編譯sql語句時,此函式返回sqlite_ok,否則返回錯誤代號
例子: sqlite3_preapare_v2(pdb, "create table testtable(string text)", -1, ppstmt, null)
有個函式非常利於除錯用,它是const char *sqlite3_errmsg(sqlite3 *pdb),此函式返回上次操作sqlite3資料時,識別的錯誤的資訊。
注意:此函式的返回的 字串,不需我們自己呼叫sqlite3_free()釋放。
如:if(sqlite3_prepare_v2(..) != sqlite_ok)
編譯好sql語句後,我們就需要執行這些語句:
int sqlite3_step(sqlite3 *pdb, sqlite3_stmt *pstmt)
sql語句是insert、delete、drop或delete時,只需呼叫此函式一次,然後檢查它是否返回sqlite_done即可;
如果sql語句是select,因為select可能返回多行資料,此時,此時,每呼叫一次sqlite3_step()就相當fetch下一行資料,當sqlite3_step()成功fetch一行資料時,返回sqlite_row,當fetch完所有的資料時,再呼叫sqlite3_step()後會返回sqlite_done
當不在需要使用sqlite3_stmt物件時,需要呼叫sqlite_finalize(sqlite3_stmt *pstmt)釋放掉
當不再需要進行資料庫操作時,需要呼叫sqlite_close(sqlite3 *pdb)關閉資料庫鏈結。
C語言封裝sqlite3 API
執行類似insert,update,create,drop這些不需要結果的sql語句。int executenoquery sqlite3 db,const char sql if sqlite3 step pstmt sqlite done if pstmt null sqlite3 finali...
Sqlite3學習筆記
1 觸發器 trigger 說明 a sqlite3觸發器只支援for each row,不支援for each statment,即只能對行的增刪改進行監聽,不能對單條sql語句進行監聽 b sqlite3觸發器觸發的執行結果只能執行dml操作,無法執行ddl操作 語法格式 create trig...
sqlite3學習筆記
配置的環境 python version 3.6 django version 1.11.5 1.建立sqlite3資料庫 執行python3 manage.py syncdb提示unknown command syncdb python3 manage.py syncdb unknown comm...