数据库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();
}