**
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資料夾下。最後可正常鏈...