QMYSQL——mysql

QSQLITE——sqlite

QOICQ——orcale

所需头文件

.pro增加 sql

#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
QT       += core gui sql

QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7

出现以上问题,找到Mysql an'zhu安装目录下lib 下 libmysql.dll 动态库复制到 C:\Qt\5.11.2\mingw53_32\bin 下

显示模型中的数据, 需要使用视图 QTableView控件 - QSqlTableModel类

mysql.cpp

#include "mysql.h"
#include "ui_mysql.h"
#include <QSqlDatabase>
#include <QDebug>
#include <QMessageBox>
#include <QSqlError>
#include <QSqlQuery> MySql::MySql(QWidget *parent) :
QWidget(parent),
ui(new Ui::MySql)
{
ui->setupUi(this);
// 添加一个mysql数据库
qDebug() << QSqlDatabase::drivers();
// ("QSQLITE", "QMYSQL", "QMYSQL3", "QODBC", "QODBC3", "QPSQL", "QPSQL7")
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
// 设置数据库
db.setHostName("127.0.0.1"); // 主机IP
db.setUserName("root"); // 登录mysql数据库的用户名
db.setPassword(""); // 登录密码
db.setDatabaseName("books"); // 连接的数据库名
// 打开数据库
if(db.open() == false)
{
QMessageBox::warning(this, "warning", db.lastError().text());
}
// 增删查改 ...
// 添加一条记录
QSqlQuery query; QString sql = "insert into app_authors(name,age) values('vincent',100)";
query.exec(sql); // 预处理
// ? -- 通配符, odbc风格的通配符
query.prepare("insert into app_authors(name,age) values(?,?)");
// 添加绑定数据
QVariantList nameList;
nameList << "aa" << "bb" << "cc";
query.addBindValue(nameList);
QVariantList ageList;
ageList << << << ;
query.addBindValue(ageList);
// 执行批处理
query.execBatch(); // oracle 风格的通配符
// 定义方式: :+自定义的名字
query.prepare("insert into app_authors(name, age) values(:name, :age)");
QVariantList ageList;
ageList << << << ;
query.bindValue(":age",ageList);
QVariantList nameList;
nameList << "hh" << "ff" << "gg";
query.bindValue(":name",nameList);
query.execBatch(); // 数据查询
query.exec("select name, age from app_authors");
while(query.next()) { // 遍历每一条记录
qDebug() << query.value().toString().toUtf8().data() // // 0 -- 第一个字段的索引
<< query.value().toInt()
<< query.value("name").toString().toUtf8().data();
}
// 1. 实例化model
model = new QSqlTableModel(this);
// 2. 将模型设置到视图中
ui->tableView->setModel(model);
// 3. 给model设置数据库表 -- 前提条件: 数据库已经打开了
model->setTable("app_authors");
// 4. 查询表
model->select();
// 5. 设置表头
model->setHeaderData(, Qt::Horizontal, "编号");
model->setHeaderData(,Qt::Horizontal,"姓名");
model->setHeaderData(,Qt::Horizontal,"年龄"); model->setEditStrategy(QSqlTableModel::OnManualSubmit); } MySql::~MySql()
{
delete ui;
} void MySql::on_submit_clicked()
{
model->submitAll();
} void MySql::on_revert_clicked()
{
model->revertAll(); // 撤销步骤
model->submitAll(); // 提交步骤 -- 更新数据模型 model->select();
} void MySql::on_search_clicked()
{
QString name = ui->lineEdit->text();
//slect * from aa where name = 'xiaoming';
// 设置过滤条件
QString sql = QString("name='%1'").arg(name);
model->setFilter(sql);
// 重新查询
model->select();
}

mysql.h

#ifndef MYSQL_H
#define MYSQL_H #include <QWidget>
#include <QSqlTableModel>// 数据模型
// 显示模型中的数据, 需要使用视图 QTableView - QSqlTableModel
// qt model - view 模型 namespace Ui {
class MySql;
} class MySql : public QWidget
{
Q_OBJECT public:
explicit MySql(QWidget *parent = );
~MySql(); private slots:
void on_submit_clicked(); void on_revert_clicked(); void on_search_clicked(); private:
Ui::MySql *ui;
QSqlTableModel * model;
}; #endif // MYSQL_H

最新文章

  1. C#编程模式之扩展命令
  2. 零成本实现Web性能测试:基于Apache JMeter
  3. Fuzz的那些事
  4. What is SSL and what are Certificates?
  5. C# 定时器运用
  6. Java设计模式-工厂方法模式(Factory Method)
  7. MFC之简单计算器
  8. swift 函数返回值
  9. mysql修改root密码的方法
  10. MATLAB中imshow()和image()
  11. 日月如梭,玩转JavaScript日期
  12. Android开发之NavigationView的使用
  13. dp水一天
  14. Count:2org.apache.batik.transcoder.TranscoderException: null
  15. C#之序列化对象(二进制方式序列化对象)
  16. Python 列表切片陷阱:引用、复制与深复制
  17. Win10 - MySQL 5.7 忘记密码
  18. 人工智能第三课:数据科学中的Python
  19. spring 使用外部属性文件
  20. LeetCode 41 First Missing Positive(找到数组中第一个丢失的正数)

热门文章

  1. (二十二)自定义简化版JDBC(Dbutils框架的设计思想)
  2. ES6中Map与其他数据结构的互相转换
  3. boost random library的使用
  4. phpspider爬虫框架的使用
  5. arcgis js之卷帘工具
  6. Python-memcached的使用用法
  7. Java基础加强-日志
  8. Oracle面试题及答案整理
  9. 运行时异常与受检异常有何异同、error和exception有什么区别
  10. Python 嵌套列表解析