SQL 操作。

数据库QMYSQL

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QSqlTableModel>   // 数据模型
// 显示模型中的数据, 需要使用视图 QTableView - QSqlTableModel
// qt model - view 模型

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
private slots:
    void on_submit_clicked();
    void on_revert_clicked();
    void on_search_clicked();
private:
    Ui::MainWindow *ui;
    QSqlTableModel* model;
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QSqlDatabase>
#include <QDebug>
#include <QMessageBox>
#include <QSqlError>
#include <QSqlQuery>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //添加sql数据库
    // 1.添加一个mysql数据库, pc端,需要安装mysql数据库,用于让qt连接。
    qDebug() << QSqlDatabase::drivers();
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    //  2.设置数据库连接信息
    db.setHostName("127.0.0.1"); // 主机IP
    db.setUserName("root"); // 登录mysql数据库的用户名
    db.setPassword("root"); // 登录密码
    db.setDatabaseName("itcast"); // 连接的数据库名
    if(db.open() == false) // 3.打开数据库
    {
        QMessageBox::warning(this, "warning", db.lastError().text());
    }

    // 增删查改 ...
    // 添加一条记录
    QSqlQuery query;
    //    QString sql = "insert into people(name, age) values('张三丰', 123)";
    //    query.exec(sql);
    // 预处理
    // ? -- 通配符, odbc风格的通配符
    //    query.prepare("insert into people(name, age) values(?, ?)");
    //    // 添加绑定数据,批处理
    //    QVariantList nameList;
    //    nameList << "aa" << "bb" << "cc";
    //    query.addBindValue(nameList);
    //    QVariantList ageList;
    //    ageList << 12 << 13 << 14;
    //    query.addBindValue(ageList);
    //    // 执行批处理
    //    query.execBatch();

    // oracle 风格的通配符
    // 定义方式:          :+自定义的名字
    //    query.prepare("insert into people(name, age) values(:name, :age)");
    //    // 添加绑定数据
    //    QVariantList ageList;
    //    ageList << 12 << 13 << 14;
    //    query.bindValue(":age", ageList);
    //    QVariantList nameList;
    //    nameList << "aa11" << "bb222" << "cc333";
    //    query.bindValue(":name", nameList);
    //    // 执行批处理
    //    query.execBatch();

    // 数据查询******
    query.exec("select name, age from people");
    while(query.next()) // 遍历每一条记录
    {
        qDebug() << query.value(0).toString().toUtf8().data() // 0 -- 第一个字段的索引  0/name.
                 << query.value("name").toString().toUtf8().data(); // 1/name
    }

    // 1. 实例化model
    model = new QSqlTableModel(this);
    // 2. 将模型设置到视图tableView中
    ui->tableView->setModel(model);
    // 3. 给model设置数据库表 -- 前提条件: 数据库已经打开了
    model->setTable("student");
    // 4. 查询表
    model->select();
    // 5. 设置水平表头
    model->setHeaderData(0, Qt::Horizontal, "编号");
    // 6. 设置提交模式,不自动提交
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);
}
MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_submit_clicked() //提交
{
    qDebug()  << "on_submit_clicked";
    model->submitAll(); //槽函数
}
void MainWindow::on_revert_clicked() //撤销
{
    qDebug()  << "on_revert_clicked";
    model->revertAll(); // 撤销步骤
    model->submitAll(); // 提交步骤 -- 更新数据模型 model->select();
}
void MainWindow::on_search_clicked()//query
{
    qDebug()  << "on_search_clicked";
    QString name = ui->lineEdit->text();    // 查询的人的名字
    //slect * from aa  where name = 'xiaoming';
    // 设置过滤条件 name. 查询字符串,要带单引号
    QString sql = QString("name='%1'").arg(name);
    model->setFilter(sql);
    // model 重新查询
    model->select();
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 创建一个线程,命名为ThreadOne,启动线程,要求能够打印1~10的所有数字,每隔1秒打印。 mainwind...
    Aya呸阅读 226评论 0 0
  • spark 2.X与1.x的区别 spark sql 2.x以上版本和1.x版本有个很大的区别:spark1.x的...
    jackLee阅读 3,128评论 0 3
  • 在编写shell脚本的时候,可能会遇到操作mysql数据库的情况。下面介绍如何在shell脚本中操作mysql数据...
    ifcoder阅读 2,744评论 0 2
  • 安装Qt及Qt Creator 在Terminal中输入 其中 qt4-dev-tools中包含了Qt Assis...
    帅碧阅读 389评论 0 2
  • 前面写了如何使用 SDL 显示一张 BMP 图片,但这并不是我们最终的目的。我们最终的目的是使用 SDL 显示 Y...
    村口大白杨阅读 1,905评论 0 2

友情链接更多精彩内容