QT讀寫Sqlite
阿新 • • 發佈:2018-12-10
在.pro檔案中新增QT += sql
執行qmake
QT對一些基本的資料庫的訪問封裝,可謂是極大的方便的我們開發人員,現在我們就來說下QT對Sqlite這個資料庫的讀寫,Sqlite是一個比較小型的本地資料庫,對於儲存一些軟體配置引數或量不是很大的資料是相當的方便,Qt本身已經自帶了Sqlite的驅動,直接使用相關的類庫即可,這篇我們主要來說明QT訪問Sqlite資料庫的三種方式(即使用三種類庫去訪問),分別為QSqlQuery、QSqlQueryModel、QSqlTableModel,對於這三種類庫,可看為一個比一個上層,也就是封裝的更厲害,甚至第三種QSqlTableModel,根本就不需要開發者懂SQL語言,也能操作Sqlite資料庫。
1、首先使用QSqlQuery來訪問
我們先要在工程中包含與資料庫相關的幾個標頭檔案
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlRecord>
#include <QtSql/QSqlQuery>
#include <QtWidgets/QApplication>
#include <QCoreApplication>
#include <QDebug>
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQuery>
#include <QtSql/QSqlRecord>
typedef struct _testInfo //假定資料庫儲存內容
{
QString UsreName;
QString IP;
QString Port;
QString PassWord;
QString Type;
}testInfo;
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QVector<testInfo> infoVect; //testInfo向量,用於儲存資料庫查詢到的資料
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(QApplication::applicationDirPath() + "/CONFIG/" + "CONFIG.db");
if (!db.open())
{
return 0;
}
/**************************使用QSqlQuery操作資料庫**************************/
QSqlQuery query; //執行操作類物件
//查詢資料
query.prepare("SELECT * FROM T_USER_MANAGE");
query.exec(); //執行
QSqlRecord recode = query.record(); //recode儲存查詢到一些內容資訊,如表頭、列數等等
int column = recode.count(); //獲取讀取結果的列數
QString s1 = recode.fieldName(0); //獲取第0列的列名
while (query.next())
{
testInfo tmp;
tmp.UsreName = query.value("UsreName").toString();
tmp.IP = query.value("IP").toString();
tmp.Port = query.value("Port").toString();
tmp.PassWord = query.value("PassWord").toString();
tmp.Type = query.value("Type").toString();
infoVect.push_back(tmp); //將查詢到的內容存到testInfo向量中
}
for (int i=0; i<infoVect.size(); i++) //列印輸出
{
qDebug() << infoVect[i].UsreName << ":" \
<< infoVect[i].IP << ":" \
<< infoVect[i].Port << ":" \
<< infoVect[i].PassWord << ":" \
<< infoVect[i].Type;
}
//插入資料
query.prepare("INSERT INTO T_USER_MANAGE (UsreName, IP, Port, PassWord, Type) VALUES (:UsreName, :IP, :Port, :PassWord, :Type)");
query.bindValue(":UserName", "user4"); //給每個插入值識別符號設定具體值
query.bindValue(":IP", "192.168.1.5");
query.bindValue(":Port", "5004");
query.bindValue(":PassWord", "55555");
query.bindValue(":Type", "operator");
query.exec();
//更改表中 UserName=user4 的Type屬性為admin
query.prepare("UPDATE T_USER_MANAGE SET Type='admin' WHERE UserName='user4'");
query.exec();
//刪除表中 UserName=user4的使用者資訊
query.prepare("DELETE FROM T_USER_MANAGE WHERE UserName='user4'");
query.exec();
query.clear();
/**************************使用QSqlQuery操作資料庫END***********************/
return 0;
}
使用QSqlQueryModel來訪問
QSqlQueryModel類帶有Model字樣,相信你已經猜到我們可以用他來關聯試圖,就能把資料庫的內容顯示到檢視上,當然,常規的操作也是可以的,但是我們只說說怎麼用這個類來把資料庫中的內容顯示到是檢視中,這裡我們選擇的檢視類為QTableView,直接上程式碼吧
#include <QtWidgets/QApplication>
#include <QCoreApplication>
#include <QDebug>
#include <QString>
#include <QTableView>
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQueryModel>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(QApplication::applicationDirPath() + "/CONFIG/" + "CONFIG.db");
if (!db.open())
{
return 0;
}
QSqlQueryModel *model = new QSqlQueryModel;
model->setQuery("SELECT * FROM T_USER_MANAGE", db); //從給定的資料庫db執行sql操作, db需預先制定並開啟
int column = model->columnCount(); //獲取列數
int row = model->rowCount(); //獲取行數
model->setHeaderData(0, Qt::Horizontal, QStringLiteral("使用者名稱")); //設定表頭,如不設定則使用資料庫中的預設表頭
model->setHeaderData(1, Qt::Horizontal, QStringLiteral("IP地址"));
model->setHeaderData(2, Qt::Horizontal, QStringLiteral("埠"));
model->setHeaderData(3, Qt::Horizontal, QStringLiteral("密碼"));
model->setHeaderData(4, Qt::Horizontal, QStringLiteral("使用者型別"));
QTableView *view = new QTableView; //定義檢視,只能用於顯示,不能修改資料庫
view->setFixedSize(500, 200);
view->setModel(model);
view->show();
return a.exec();
}