在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维度