linux平台qt資料庫程式設計
在linux平台使用qt來編寫gui程式,在進行資料庫程式設計的時候,有兩種選擇方式,分別是:基於linux平台的資料庫介面函式程式設計,另一種是使用qt自帶的有關資料庫類。那在這裡我分別來講一下這兩種方式的實現。
一、使用linux平台的資料庫介面程式設計:
在這裡我使用的是一款免費的資料庫sqlite,從網路上下乙個sqlite-3.0.8.tar.gz原始碼包,然後進行安裝,安裝好後就可以使用它提供的函式介面。接下來我們用安裝好的sqlite提供的函式介面,在qt中使用的,**片段示例如下:
這是乙個槽函式,在這個槽函式實現了對資料庫的操作,使用的是剛才自已安裝好的sqlite資料庫提供的api函式。
void qt1::open_data()
int ret;
char *zerrmsg;
//開啟資料庫,如果這個資料庫檔案不存在,就建立它
ret = sqlite3_open("student.db",&db);
if(ret)
fprintf(stderr,"cannot open database:%s\n",sqlite3_errmsg(db));
sqlite3_close(db);
exit(-1);
else
printf("you are right\n");
//sql語句
char *sql = (char *)"create table studentdata(\
id integer primary key,\
sid tnteger,\
name varchar(20),\
score integer\
//通過c介面來執行上面的乙個sql語句,建立乙個表
sqlite3_exec(db,sql,0,0,&zerrmsg);
這裡只是給了乙個簡單的例項,通過那些sql語句,然後搭配上sqlite提供的操作介面函式,我們就可以對資料庫進行增、刪、改、查等這一系列的操作。當然在編譯的時候要注意的是一定要去連線這樣的乙個sqlite資料庫的動態庫,否則是編譯不過的。
二、使用qt自帶的資料庫程式設計的類:
在qt中,提供了乙個qtsql這樣的乙個模組,qtsql這個模組提供了與平台以及資料庫種類無關的訪問sql資料庫的介面,這個介面由利用qt的模型/檢視結構將資料庫與使用者介面整合的一套類來支援。qsqldatabase物件表徵了資料庫的關聯,qt使用驅動程式與各種資料庫的應用程式設計介面進行通訊。qt支援多種資料庫,但大部分資料庫是收費的,qt提供內建的資料庫,那就是sqlite。
那麼如下我們將會使用qt提供的操作介面,來對資料庫的操作,**示例如下:
標頭檔案data.h
#ifndef _data_
#define _data_
#include
#include
#include
#include
#include "ui_data.h"
class data: public qdialog, public ui_data
q_object
public:
data(qwidget *parent = 0);
void creatdata();
public slots:
void datainsert();
void dataselete();
private:
qsqldatabase db; //內建乙個qsqldatabase物件,通過它來和資料庫進行關聯
qsqlquery *query; // qsqlquery提供了很多可以用來處理資料來源的介面
#endif
實現檔案data.cpp
#include
#include
#include
#include
#include "data.h"
data::data(qwidget *parent):qdialog(parent)
setupui(this);
creatdata(); //建立資料庫檔案
connect(pbinsert, signal(clicked()), this, slot(datainsert()));
connect(pbselete, signal(clicked()), this, slot(dataselete()));
connect(pbquit, signal(clicked()), this, slot(close()));
void data::creatdata()
//建立乙個qsqldatabase物件,adddatabase函式第乙個引數指定了qt
//必須使用哪乙個資料庫驅動程式來訪問這個資料庫
db = qsqldatabase::adddatabase("qsqlite");
db.sethostname("linux");
//設定資料庫檔案的名字
db.setdatabasename("database");
//設定使用者名稱
db.setusername("steve");
//設定密碼
db.setpassword("steve");
//開啟資料庫檔案
bool ok = db.open("steve", "steve");
if(ok)
qdebug()<
//指定db為query的父類
query = new qsqlquery(db);
//建立乙個表
query->exec("create table data (\
id integer primary key autoincrement,\
name varchar(6) not null,\
score varchar(20) not null);");
query->clear();
void data::datainsert()
qstring name = lename->text();
qstring score = lescore->text();
qdebug()* prepares the sql query query for execution. returns true if the query is prepared successfully; otherwise returns false.*/
//使用prepare()來指定乙個包含佔位符的查詢,
//然後賦值繫結想插入的資料
query->prepare("insert into data(name, score) values (:name, :score)");
query->bindvalue(":name", name.tolocal8bit().data());
query->bindvalue(":score", score.tolocal8bit().data());
query->exec(); //執行sql語句
query->clear();
void data::dataselete()
tablewidget->setrowcount(10);
tablewidget->setcolumncount(2);
tablewidget->sethorizontalheaderitem(0, new qtablewidgetitem("name"));
tablewidget->sethorizontalheaderitem(1, new qtablewidgetitem("score"));
query->exec("select * from data");
int i = 1;
int j = 0;
//只要呼叫next()第一次,就可以把這個qsqlquery定位到結果集中的第一條記錄,
//隨後再呼叫next(),每次都會把記錄指標前移一條記錄,直到到達結尾時返回false。
while (query->next())
//value(i)把字段值作為qvariant返回。
qstring name = query->value(i++).tostring();
tablewidget->setitem(j, i-2, new qtablewidgetitem(name));
qstring score = query->value(i).tostring();
tablewidget->setitem(j++, i-1, new qtablewidgetitem(score));
i = 1;
query->clear();
通過以上的**,實現的效果如下:
如果想用qtsql模組的話,還必須在pro檔案中加入一條語句:qt += sql
以下是有關qt對資料庫操作的一些類:
qsqldatabase qsqldriver qsqlquery qsqlerror qsqlquerymodel
qsqltablemodel qsqlrelation qsqlrelationaltablemodel
總結:在用qt做gui程式設計時,如果是對資料庫的操作的話,那麼可以使用兩種方法,但是對qt本身來說,還是使用qt自帶的qtsql模組來操作還是比較好,通過qt自己的一些類來操作這些資料庫,沒有使用linux平台下的那下介面麻煩。
Qt資料庫程式設計
qtsql模組提供了乙個平台無關且資料庫無關的訪問sql資料庫的介面。qt中的每個資料庫連線用乙個qsqldatabase物件來表示 qt使用不同driver來和各種不同資料庫的api進行通訊。qsqlquery提供了直接執行任意sql語句的特性 此外還提供了兩個高層次的無需sql命令的資料庫介面 ...
Qt之資料庫程式設計
摘自 c gui qt4程式設計 在qt中,實現與資料庫程式設計相關的模組是qtsql模組,該模組提供了一組與平台以及資料庫種類無關的sql資料庫訪問介面。此介面通過驅動程式與各種資料庫進行通訊。qt桌面版提供的驅動程式如下 驅動程式 資料庫qdb2 ibm db2 7.1版以及更高版本 qoci ...
QT 資料庫程式設計一
qt如果要進行網路程式設計首先需要在.pro中新增如下 qt network logindlg.h ifndef logindlg h define logindlg h include include include include class logindlg public qdialog en...