1. 程式人生 > >QT:在Qt中使用SQLite資料庫

QT:在Qt中使用SQLite資料庫

在QT中使用資料庫

QMYSQL  (MySQL)

QSQLITE  (SQlite 3 )  -  QT 自帶的資料庫
~/Qt5.4.1/5.4/gcc_64/plugins/sqldrivers  // 資料庫.so動態庫檔案
別的資料庫可以下載下來,直接拷貝到該目錄,就可以直接用了

QSqlDatabase   建立QT程式和資料庫的連線
/** 程式碼演示 - assistant **/

 // 建立於資料庫的連線
 QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
 db.setHostName("acidalia");
 // 設定資料庫的名字 .db
 db.setDatabaseName("custom.db");
 db.setUserName("mojito");
 db.setPassword("J0a1m8");
 bool ok = db.open();  // 開啟資料庫

QSqlQuery  提供SQL語句操作和執行方法
/** 程式碼演示 - assistant **/

QSqlQuery query; 
query.exec ("SQL語句");  //  複雜的SQL語句可由DBA提供


QSqlQueryModel    是高層次介面,也可以用於執行SQL語句,能以Model的方式去遍歷結果集
/** 程式碼演示 - assistant **/

    QSqlQueryModel *model = new QSqlQueryModel; 
    model->setQuery("SELECT name, salary FROM employee"); 
    model->setHeaderData(0, Qt::Horizontal, tr("Name"));
    model->setHeaderData(1, Qt::Horizontal, tr("Salary"));
    QTableView *view = new QTableView;
    view->setModel(model);
    view->show();

《案例》學生資訊管理系統

工程名:SqliteQt
類名:SqlDialog
Qt designer Combo Box 組合框  // 雙擊可以新建其內容條目
Qt designer Tabel View 組合框

建立--->繪製ui--->.pro中的QT+=新增sql--->新增相應的標頭檔案--->編寫程式碼
/** 學生資訊管理系統 - 程式碼演示 **/

// .h標頭檔案 
#ifndef SQLDIALOG_H
#define SQLDIALOG_H
#include <QDialog>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlQueryModel>
#include <QSqlError>
#include <QDebug>
#include <QMessageBox>
namespace Ui {
class SqlDialog;
}
class SqlDialog : public QDialog {
    Q_OBJECT
public:
    explicit SqlDialog(QWidget *parent = 0);
    ~SqlDialog();
private slots:
    void on_sortButton_clicked();
    void on_insertButton_clicked();
    void on_deleteButton_clicked();
    void on_modifyButton_clicked();
private:
    // 建立資料庫
    void createDB (void);
    // 建立資料表
    void createTable (void);
    // 查詢資料
    void queryTable (void);
private:
    QSqlDatabase db; // 建立QT程式和資料的連線
    QSqlQueryModel model; // 儲存和遍歷查詢結果
private:
    Ui::SqlDialog *ui;
};
#endif // SQLDIALOG_H
// .cpp原始檔 
#include "SqlDialog.h"
#include "ui_SqlDialog.h"
SqlDialog::SqlDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::SqlDialog) {
    ui->setupUi(this);
    createDB ();
    createTable ();
    queryTable ();
}
SqlDialog::~SqlDialog() {
    delete ui;
}
//建立資料庫檔案 <=等價於=>  $: sqlite3 menu.db
void SqlDialog::createDB (void) {
    // 建立和sqlite資料庫的連線
    db = QSqlDatabase::addDatabase ("QSQLITE");
    // 設定資料庫檔案的名稱
    db.setDatabaseName ("menu.db");
    // 對資料庫進行操作之前必須先開啟資料庫
    if (db.open () == false) {
        // 如果開啟失敗,彈出提示錯誤資訊的資訊視窗
        QMessageBox::critical (this, "Database open error", db.lastError ().text ());
    }
}
// 建立資料表
void SqlDialog::createTable (void) {
    // 構建建立資料表sql語句的字串
    QString str ("CREATE TABLE Student(id INT PRIMARY KEY NOT NULL, name TEXT NOT NULL, score REAL NOT NULL)");
    // 執行sql語句
    QSqlQuery query;
    query.exec (str);
}
// 查詢資料  <==>  SELECT * FROM ...
void SqlDialog::queryTable (void) {
    // 構造一個查詢資料表的sql語句
    QString str ("SELECT * FROM Student");
    // 執行sql語句並儲存結果到model
    model.setQuery (str);
    // 顯示結果到ui
    ui->tableView->setModel (&model);
}
// 排序操作
void SqlDialog::on_sortButton_clicked() {
    // 獲取排序的關鍵字 id / score
    QString value = ui->valueComboBox->currentText ();
    // 獲取排序的條件:升序 / 降序
    QString conditon;
    if (ui->condComboBox->currentIndex ()) {
        conditon = "DESC";
    } else {
        conditon = "ASC";
    }
    QString sortSql = QString (
                      "SELECT * FROM Student ORDER BY %1 %2").arg (value).arg (conditon);
    // 執行sql語句並儲存結果到model
    model.setQuery (sortSql);
    // 顯示結果到ui
    ui->tableView->setModel (&model);
}
// 插入按鈕
void SqlDialog::on_insertButton_clicked() {
    // 獲取使用者輸入的學號、姓名、成績
    int id = ui->idEdit->text ().toInt ();
    QString name = ui->nameEidt->text ();
    double score = ui->scoreEdit->text ().toDouble ();
    // 構造插入操作的sql語句
    QString insertSql = QString (
                        "INSERT INTO Student VALUES(%1, '%2', '%3')").arg (id).arg (name).arg (score);
    // 執行插入的sql語句
    QSqlQuery query;
    query.exec (insertSql);
    // 查詢並顯示
    queryTable ();
}
// 刪除資料,根據ID刪除 1 條資料
void SqlDialog::on_deleteButton_clicked() {
    int id = ui->idEdit->text ().toInt ();
    QString deleteSql = QString (
                        "DELETE FROM Student WHERE id = %1").arg (id);
    // 執行插入的sql語句
    QSqlQuery query;
    query.exec (deleteSql);
    // 查詢並顯示
    queryTable ();
}
// 修改資料,根據ID修改成績
void SqlDialog::on_modifyButton_clicked() {
    int id = ui->idEdit->text ().toInt ();
    double score = ui->scoreEdit->text ().toDouble ();
    QString ModifySql = QString (
                        "UPDATE Student SET score = %1 WHERE id = %2").arg (score).arg (id);
    // 執行插入的sql語句
    QSqlQuery query;
    query.exec (ModifySql);
    // 查詢並顯示
    queryTable ();
}
// main.cpp
#include "SqlDialog.h"
#include <QApplication>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    SqlDialog w;
    w.show();
    return a.exec();
}

【提示】'學生資訊管理系統 - 專案'
加入以下內容,完善後可作為resume專案。
驗證器:LineEdit 輸入限制
提交重複提示:id重複提示
賬戶登入:teacher001登入跳轉
平均/最大/最小:加法計算器程式碼複用嘗試求相關成績,內部排序獲取第一個
顯示當前系統時間:顯示實時時間在介面上
錄入時間加入資料庫維度:addTime維度