Linux平台QT資料庫程式設計(來自網路)

2022-08-16 22:03:15 字數 4731 閱讀 8348

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...