Qt資料庫之訪問 SQLite

2021-10-04 02:46:51 字數 2938 閱讀 1370

sqlite 是乙個開源的嵌入式關聯式資料庫,實現自包容、零配置、支援事務的sql資料庫引擎。 其特點是高度便攜、使用方便、結構緊湊、高效、可靠。整個資料庫(定義、表、索引和資料本身)都在宿主主機上儲存在乙個單一的檔案中。sqlite 支援跨平台,同乙個 sqlite 的資料庫檔案,可以在 windows,linux,mac os 中使用。sqlite 的使用非常廣泛,例如 firefox,chrome,android,ios 等都使用了 sqlite 來儲存資料。sqlite 預設不支援使用使用者名稱密碼來連線,如果我們的資料安全性要求不高,那麼就可以使用 sqlite 來儲存,這樣做的好處是資料檔案是乙個單一的檔案,可以和專案一起發布而不需要安裝資料庫軟體就能擁有資料庫的功能,這是多麼美好的事(想像一下,如果需要模擬資料庫的操作,手動用程式通過讀寫檔案的方式向乙個檔案中插入,更新,刪除一條記錄需要付出多少的代價,而用 sqlite 的話,就是一條 sql 語句的事情,用上 sqlite,這簡直是鳥槍換炮了啊)。

qt 預設已經提供了 sqlite 的驅動,直接在**裡就可以訪問 sqlite。在 plugins/sqldrivers 目錄下可以找到 sqlite 的資料庫驅動外掛程式。

1.載入sqlite 驅動

2.設定資料庫檔名

3.開啟資料庫

4.建立 query 物件,執行 sql 語句

5.遍歷 query 查詢到的結果(如果是查詢語句)

下面的**使用 qt 訪問 sqlite:

1.建立乙個名為 sqlitedata.db 的資料庫檔案

2.在資料庫裡建立乙個 product 表

3.向 product 表插入一條資料

4.查詢剛才插入的資料

在 qtcreator 裡建立控制台工程,然後在工程的 .pro 檔案裡加入 qt += sql 引入資料庫模組,修改 main.cpp 為下面的內容:

#include #include #include #include void accesssqlite();

int main(int argc, char *ar**)

void accesssqlite()

// 4. 在資料庫中建立表

qsqlquery createtablequery(db);

qstring sql("create table user("

"id integer primary key autoincrement, "

"username text not null, "

"password text not null, "

"email text, "

"mobile text)");

createtablequery.exec(sql);

// 5. 向表中插入一條資料

qsqlquery insertquery(db);

insertquery.exec("insert into user (username, password) values ('alice', 'passw0rd')");

// 6. 查詢剛才插入的資料

qsqlquery selectquery(db);

selectquery.exec("select id, username, password from user");

while (selectquery.next())

}

id: 1, username: alice, password: passw0rd
輸出了我們剛剛插入的資料,和我們預料的一樣。

在程式的工作目錄裡(編譯出來的可執行檔案所在目錄)有乙個名為 sqlitedata.db 的檔案。這是因為 db.setdatabasename(sqlitedata.db) 設定了要訪問的 sqlite 的資料庫檔名,訪問時如果發現沒有這個檔案,qt 會為我們建立,如果這個檔案已經存在,就繼續使用它。使用 sqlite 的工具,檢視一下 sqlitedata.db 的結構與資料:

可以看到有乙個 user 表,其建立語句為 create table user(id integer primary key autoincrement, username text not null, password text not null, email text, mobile text),正是我們的程式裡的建表語句,在表 user 裡有我們插入的 1 條資料。

再次執行上面的程式,這次輸出:

id: 1, username: alice, password: passw0rd

id: 2, username: alice, password: passw0rd

因為再次插入了 1 條記錄,所以訪問時輸出 2 條記錄,這次訪問 sqlitedata.db 時,發現它已經存在,所以就直接使用它了。

qt 訪問不同的資料庫,只是在建立資料庫連線時有細微的區別,其他部分的**都是一樣的。這裡我們只是展示了怎麼去訪問 sqlite,但存在很多問題,一點都不實用,更談不上結構優良,可復用等,如果在工作中把這樣的**寫到工程裡,離被老闆請去喝茶的時間也不遠了。但不幸的是,這樣的**大量存在於初學者,甚至有一定工作經驗的開發者之中。後面的章節我們會逐步分析,優化,讓其可用於實際專案,最後我們訪問資料庫的**可以像下面這樣優雅(sqlutil, daotemplate 中的**都不需要我們去修改):

int userdao::selectuserbyid(int id, user *user) 

int userdao::selectallusers(qlist*users)

int userdao::insert(const user &user, int *primarykey)

int userdao::update(const user &user)

看了上面的**是不是有點小激動,和你以往訪問資料庫的**很不一樣?不過切莫著急,麵包會有的,牛奶也會有的,只是時機未到,天機不可洩露。

詳解 Qt 4訪問Sqlite資料庫

2011 07 01 14 06 佚名 網際網路 字型大小 t t qt 4訪問sqlite資料庫是本文要介紹的內容,先來認識一下sqlite,它是一款輕量級的 基於檔案的嵌入式資料庫 ad 本文介紹的詳解qt4訪問sqlite資料庫,文章不僅對sqlite做了簡單描述,並且很詳細的介紹了sqlit...

C 訪問SQLite資料庫

a.解壓後copy c sqlite 3 5 0 b.進入cmd模式,進入sqlite 3 5 0目錄,執行sqlite3 mytest.db c.create table mytable1 seq int,desc varchar 8 insert into mytable1 values 1,p...

android訪問sqlite資料庫

在 android 中可以使用 eclipse 外掛程式ddms 來檢視,也可以使用 android 工具包中的 adb工具來檢視。android 專案中的 sqlite 資料庫位於 data data 專案包 databases中。1 首先開啟 android 專案的除錯模式,然後找到顯示 ddm...