在Qt中使用SQLite資料庫

2021-09-05 12:17:59 字數 4600 閱讀 4264

** 

sqlite(sql)是一款開源輕量級的資料庫軟體,不需要server,可以整合在其他軟體中,非常適合嵌入式系統。

qt5以上版本可以直接使用sqlite(qt自帶驅動)。

引入sql模組

在qt專案檔案(.pro檔案)中,加入sql模組:

qt += sql
#include #include #include
檢查連線、新增資料庫驅動、設定資料庫名稱、資料庫登入使用者名稱、密碼。

qsqldatabase database;

if (qsqldatabase::contains("qt_sql_default_connection"))

else

上述**解釋:

(1)第一行中,建立了乙個qsqldatabase物件,後續的操作要使用這個物件。

(2)if語句用來檢查指定的連線(connection)是否存在。這裡指定的連線名稱(connection name)是qt_sql_default_connection,這是qt預設連線名稱。實際使用時,這個名稱可以任意取。如果判斷此連線已經存在,那麼qsqldatabase::contains()函式返回true。此時,進入第乙個分支,qsqldatabase::database()返回這個連線。

(3)如果這個連線不存在,則進入else分支,需要建立連線,並新增資料庫。在else分支第一行,adddatabase()的引數qsqlite是sqlite對應的驅動名,不能改。而且需要注意的是,adddatabase()的第二個引數被省略了,第二個引數的預設引數就是上面提到的qt預設連線名稱qt_sql_default_connection。如果需要使用自定義的連線名稱(如果程式需要處理多個資料庫檔案的話就會這樣),則應該加入第二個引數,例如

database = qsqldatabase::adddatabase("qsqlite", "my_sql_connection);
這個時候,如果在另乙個地方需要判斷my_sql_connection連線是否存在,就應該使用if (qsqldatabase::contains("my_sql_connection"))

(4)else分支第二行中,setdatabasename()的引數是資料庫檔名。如果這個資料庫不存在,則會在後續操作時自動建立;如果已經存在,則後續的操作會在已有的資料庫上進行。

(5)else分支後面兩行,設定使用者名稱和密碼。使用者名稱,密碼都可以隨便取,也可以省略。

使用open()開啟資料庫,並判斷是否成功。注意,在第一步檢查連線是否存在時,如果連線存在,則在返回這個連線的時候,會預設將資料庫開啟。

if (!database.open())

else

如果開啟成功,則進入else分支。對資料庫的操作都需要在else分支中進行。

資料庫操作完成後,最好關閉。

database.close();
對資料庫進行操作需要用到qsqlquery類,操作前必須定義乙個物件。下面舉例說明操作方法。操作需要使用sqlite語句,本文中的幾個例子會使用幾個常用的語句,關於sqlite語句的具體資訊請參考sqlite相關資料。

例1:建立**

建立乙個名為student的**,**包含三列,第一列是id,第二列是名字,第三列是年齡。

qsqlquery sql_query;

qstring create_sql = "create table student (id int primary key, name varchar(30), age int)";

sql_query.prepare(create_sql);

if(!sql_query.exec())

else

**解釋:

(1)第一行定義乙個qsqlquery物件。

(2)第二行是乙個qstring,其中的內容是sqlite語句。對資料庫的操作,都是用sqlite的語句完成的,把這些指令以qstring型別,通過prepare函式,儲存在qsqlquery物件中。也可將指令,以qstring形式直接寫在exec()函式的引數中,例如:

sql_query.exec("create table student (id int primary key, name varchar(30), age int)");
建立**語句:create table (f1 type1, f2 type2,…);

create table是建立**的語句,也可用大寫create table;student是**的名稱,可以任意取;括號中是**的格式,上述指令表明,**中有三列,第一列的名稱(表頭)是id,這一列儲存的資料型別是int,第二列名稱是name,資料型別是字元陣列,最多有30個字元(和char(30)的區別在於,varchar的實際長度是變化的,而char的長度始終是給定的值),第三列的名稱是age,資料型別是int。

如果sql_query.exec()執行成功,則建立**成功。

例2:插入資料

在剛才建立的**中,插入一行資料。

qstring insert_sql = "insert into student values (?, ?, ?)";

sql_query.prepare(insert_sql);

sql_query.addbindvalue(max_id+1);

sql_query.addbindvalue("wang");

sql_query.addbindvalue(25);

if(!sql_query.exec())

else

if(!sql_query.exec("insert into student values(3, \"li\", 23)"))

else

插入語句:insert into values (value1, value2,…);

insert into是插入語句,student是**名稱,values()是要插入的資料。這裡,我們插入了2組資料。插入第一組資料的時候,用addbindvalue來替代語句中的?,替代的順序與addbindvalue呼叫的順序相同。插入第二組資料的時候,則是直接寫出完整語句。

例3:更新資料(修改資料)

qstring update_sql = "update student set name = :name where id = :id";

sql_query.prepare(update_sql);

sql_query.bindvalue(":name", "qt");

sql_query.bindvalue(":id", 1);

if(!sql_query.exec())

else

語句:update set , … where ;

更新(修改)的語句是update...set...,其中student是**名稱,name是表頭名稱(即第二列),:name是待定的變數,where用於確定是哪一組資料,:id也是待定變數。

bindvalue(" ", " ")函式用來把語句中的待定變數換成確定值。

例4:查詢資料

(1)查詢部分資料

qstring select_sql = "select id, name from student";

if(!sql_query.exec(select_sql))

else

}

這個就是在語句中用max來獲取最大值。

例5:刪除與清空

(1)刪除一條資料

qstring delete_sql = "delete from student where id = ?";

sql_query.prepare(delete_sql);

sql_query.addbindvalue(0);

if(!sql_query.exec())

else

這裡沒有用where給出限制,就會刪除所有內容。

在QT中使用sqlite

sqlite sql 是一款開源輕量級的資料庫軟體,不需要server,可以整合在其他軟體中,非常適合嵌入式系統。qt5以上版本可以直接使用sqlite qt自帶驅動 引入sql模組 在qt專案檔案 pro檔案 中,加入sql模組 qt sql include include include檢查連線...

python中使用sqlite資料庫

使用sqlite python就內建了sqlite3,所以,在python中使用sqlite,不需要安裝任何東西,直接使用。sqlite支援常見的標準sql語句以及幾種常見的資料型別。下面是乙個sqlite的增刪改查的例子 匯入sqlite驅動 import sqlite3 連線到sqlite資料庫...

QT中使用MySQL資料庫

1.鏈結mysql 首先正確安裝mysql資料庫。然後將libmysql.lib檔案放在qt安裝路徑下的對應編譯器的lib資料夾下,如f software qt5.9.5 5.9.5 mingw53 32 lib。將libmysql.dll檔案放在qt安裝路徑對應編譯器的bin資料夾下。最後可正常鏈...