1. 程式人生 > >QT讀寫Sqlite

QT讀寫Sqlite

在.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();
}