QT:在Qt中使用SQLite資料庫
阿新 • • 發佈:2019-01-27
在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維度