開啟SQlite資料庫

2021-07-10 19:09:08 字數 1877 閱讀 7069

開啟資料庫:

在執行sql資料庫之前,首先要連線資料庫(也可以稱為開啟資料庫,因為sqlite資料庫包含在單個作業系統檔案中,乙個檔案對應乙個資料庫)。

可以使用sqlite3_open(),sqlite3_open_v2(),sqlite3z_open16()函式開啟資料庫,這些函式的宣告如下:

int sqlite3_open( 

const char *filename,//資料庫檔名 utf-8

sqlite3 **ppdb //out:sqlite資料庫控制代碼

);

int sqlite3_open_v2( 

const char *filename, //資料庫檔名 utf-8

sqlite3 **ppdb, //out:資料庫控制代碼

int flags, //標誌

const char *zvfs //要使用的vfs模組的名稱

);

int sqlite3_open16( 

const void *filename, //資料庫檔名 (utf-16)

sqlite3 **ppdb //out:sqlite資料庫控制代碼

);

一般情況下,推薦使用sqlite3_open_v2()這個函式,因為這是sqlite中最新和最強大的開啟資料庫的函式。與舊的sqlite3_open()相比,它有更多的選項,具有更強的能力。

不管選擇哪個開啟資料庫函式,他們有共同的引數:filename與ppdb

引數filename:可以是作業系統檔案,也可以是文字字串":memory:",或者為空字串,或空指標。

如果使用":memory:",sqlite3_open_v2()將在記憶體中建立資料庫,該資料庫值存在於鏈結生存期間

如果檔名為空字串或者null,sqlite3_open_v2()將開啟臨時磁碟檔案,並在鏈結關閉時自動刪除該檔案。

如果是其他選項(作業系統檔案),函式將嘗試開啟通過引數值指定的資料庫檔案,如果資料庫檔案不存在,sqlite3_open_v2()函式將根據flags引數決定是否建立資料庫還是返回資料庫不存在的錯誤資訊,而其他函式則建立資料庫。

引數*ppdb:sqlite資料庫控制代碼

引數flags:包括以下位元向量:

sqlite_open_readonly:以唯讀模式開啟資料庫(資料庫已存在,否則返回錯誤)

sqlite_open_readwrite:以讀寫模式開啟資料(資料庫已存在,否則返回錯誤)

sqlite_open_create:當資料庫已存在,將其開啟,當資料庫不存在,則會建立

引數flags也會結合sqlite_open_nomutex、sqlite_open_fullmute、sqlite_open_sharedcache、sqlite_open_privatecache標誌,以進一步控制資料庫控制代碼的事務行為。

引數*zfvs:允許呼叫去重寫預設的作業系統介面sqlite3_vfs方法。

關閉資料庫:

使用sqlite3_close()函式可以關閉資料庫,函式宣告如下:

int  sqlite3_close(sqlite3*)

要成功執行sqlite3_close()函式,必須完成於連線關聯的所有準備查詢。只要有乙個查詢仍未完成,sqlite3_close()都會返回乙個sqlite_busy兵顯示錯誤資訊"由於有未完成的語句,所以無法關閉連線"

【注意:使用sqlite3_close()關閉連線時,如果連線上有開啟的事務,該事務將自動回滾。】

SQLite資料庫掃盲

今天注意到 sqlite 3.6.11 上個月發布的 增加了乙個我期待已久的 online backup 介面,激動之餘就順便和大夥兒聊一下sqlite資料庫。本帖權當是sqlite掃盲,如果你對sqlite已經很熟悉,本文就不必再看了。技術上的優點和特性 sqlite是乙個輕量級 跨平台的關係型資...

瞎掰 Sqlite資料庫

為了方便專案的跨平台,在選用資料庫時選擇了輕量級的跨平台資料庫 sqlite 在使用過程中,將常用介面封裝了一下,使 相對簡潔,使用起來也相對方便。目前封裝了兩個介面 一 封裝了sqlite3 exec介面 int homedatabase callmysql sqlite3 sqlfd,const...

SQLite資料庫基礎

import studentmanager.h import student.h import 4.建立資料庫並引入資料庫的標頭檔案 define ksqlfilename student.sqlite 這個類之乙個單例類,類所建立的物件是唯一的 static studentmanager mana...