在使用資料庫的時候,主要任務是建立和資料庫之間的串連,執行SQL語句。
SQLite中有下面兩個重要的對象(指向結構體的指標):
sqlite3,
代表資料庫連接的對象。
sqlite3_stmt,
代表SQL語句的對象。
SQLite中的重要函數:
sqlite3_open(),
開啟資料庫的函數,傳回值為整型,指代了開啟操作的結果,若結果等於SQLITE_OK這個常量,則說明成功開啟資料庫。若開啟失敗,會返回相應的錯誤碼。
sqlite3_prepare(),
要執行SQL語句,必須先把它編譯成位元組碼。sqlite3_prepare函數就是負責編譯SQL語句。
sqlite3_step(),
使用sqlite3_prepare函數將SQL語句編譯好了以後,可以使用step函數來執行。對於有傳回值的執行語句(如select),調用一次sqlite_step函數將會執行並記錄一行(row)有效結果到sqlite3_stmt裡。要繼續擷取後面的運行結果,就要再執行sqlite3_step函數直到所有結果都記錄完畢。比如,sqlite3_stmt中有語句“select * from studentTable order by id”,若結果包含多條資料,則使用sqlite3_step()函數只能得到第一行的內容,繼續調用該函數直到所有結果都已記錄完畢。而對於沒有傳回值的語句(如INSERT/UPDATE/DELETE),執行一次即可。
sqlite3_column(),
對於select語句,在使用sqlite3_step運行後,需要將結果讀出來。實際上不存在一個叫sqlite3_column()的函數,這是一系列函數的代稱,它們共同的作用就是從當前的結果中按列號取出值。比如一個select語句運行後,其中的一條結果為 01 “what_if” "male"。這個結果就包含3列,那麼就可以利用該函數,找出特定某一列的值,根據實值型別的不同,需要調用不同的函數,比如針對第一列,類型為整型,調用sqlite3_column_int(stmt, 0)來返回第一列的值;而第二列的資料類型是文本(text),相應地,調用sqlite3_column_text(stmt, 1)得到第二列的文本資訊。該函數還有位元組類型(byte)、雙精確度型(double)等。
sqlite3_finalize(),
sqlite3_stmt使用完畢,用sqlite3_finalize()函數來銷毀。如果把sqlite3_stmt看作對象的話,這個函數就相當於是它的解構函式。在結束使用sqlite3_stmt,必須要調用該函數,否則會造成記憶體泄露。
sqlite3_close(),
資料庫操作結束後,需要將資料庫連接關閉。用sqlite3_close()函數來關閉,顯然,這是和sqlite_open()成對出現的。在關閉之前,需要使用sqlite3_finalize()來銷毀所有sqlite3_stmt對象。
sqlite3_exec(),
sqlite3_exec()為執行sql語句提供了一種便捷的方法,只需要將sql語句的字串(char *)傳遞給該函數即可。我們指定回呼函數(callback)來處理執行後的傳回值。不過一般情況下,sqlite3_exec()函數多用於執行無傳回值的語句(CREATE/DROP等),對於有傳回值的操縱(如select),常結合使用sqlite3_prepare、sqlite3_step()、sqlite3_clumn()獲得執行結果。
附表:
最重要的SQLite API命令
1.函數:sqlite3_open(參數:檔案名稱、資料庫地址) 開啟資料庫
2.函數:sqlite3_prepare (參數: 資料庫、UTF-8格式的SQL、最大讀取長度、語句地址、結果地址) 將UTF-8格式的SQL語句轉換為編譯後的語句,並返回指向該語句的指標,可將其傳遞給其他函數
3.函數:sqlite3_step ( 參數:編譯後的語句) 在編譯後的語句返回的結果中向前移一條記錄或返回錯誤
4.函數:sqlite3_column_int (參數:編譯後的語句、欄位編號) 返回目前記錄中的一個int欄位。還有其他幾個類似的函數,它們返回目前記錄中的指定欄位
5.函數:sqlite3_column_string (參數:編譯後的語句、欄位編號)
從目前記錄中返回一個char *,即一個字串,還有其他幾個類似的函數,它們返回目前記錄中的指定欄位
6.函數:sqlite3_finalize (參數:編譯後的語句)
刪除編譯後的語句
7.函數:sqlite3_close (參數:資料庫)
關閉資料庫
使用SQLite資料庫的一般步驟:
1.開啟資料庫;
2.以每次一條的方式準備語句;
3.遍曆結果--讀取欄位;
4.刪除語句;
5.關閉資料庫。
也可以用sqlite3_exec()和sqlite3_get_table()來簡化上面的步驟。