(十八)链接数据库,QSqlTableModel
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
(十八)链接数据库,QSqlTableModel的更多相关文章
- Python学习(十八)—— 数据库(三)
转载自http://www.cnblogs.com/linhaifeng/articles/7356064.html 一.数据操作 1.插入数据INSERT 1. 插入完整数据(顺序插入) 语法一: ...
- 四十八:数据库之alembic常用命令和经典错误的解决办法
常用命令:1.init:创建一个alembic仓库2.reversion:创建一个新的版本3.--autogenerate:自动将当前模型的修改,生成迁移脚本4.-m:message,可以记录本次迁移 ...
- 三十八:数据库之ORM层面删除数据的注意事项
准备工作 from sqlalchemy import create_engine, Column, Integer, String, Float, Text, ForeignKeyfrom sqla ...
- Python学习日记(三十八) Mysql数据库篇 六
Mysql视图 假设执行100条SQL语句时,里面都存在一条相同的语句,那我们可以把这条语句单独拿出来变成一个'临时表',也就是视图可以用来查询. 创建视图: CREATE VIEW passtvie ...
- Python学习第二十六课——PyMySql(python 链接数据库)
Python 链接数据库: 需要先安装pymysql 包 可以设置中安装,也可以pip install pymysql 安装 加载驱动: import pymysql # 需要先安装pymysql 包 ...
- Python之路【第十八篇】:Web框架们
Python之路[第十八篇]:Web框架们 Python的WEB框架 Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Pytho ...
- VMware vSphere 服务器虚拟化之二十八 桌面虚拟化之安装View传输服务器
VMware vSphere 服务器虚拟化之二十八 桌面虚拟化之安装View传输服务器 View 传输服务器用于管理和简化数据中心与在最终用户本地系统上检出使用的 View 桌面之间的数据传输.必须安 ...
- VMware vSphere 服务器虚拟化之十八桌面虚拟化之安装View Composer服务器
VMware vSphere 服务器虚拟化之十八桌面虚拟化之安装View Composer服务器 View Compose服务可安装在管理虚拟机的vC ...
- SQL注入之Sqli-labs系列第十八关(基于错误的用户代理,头部POST注入)
开始挑战第十八关(Header Injection - Uagent field - Error based) 常见的HTTP注入点产生位置为[Referer].[X-Forwarded-For].[ ...
- Redis进阶实践之十八 使用管道模式提高Redis查询的速度
原文:Redis进阶实践之十八 使用管道模式提高Redis查询的速度 一.引言 学习redis 也有一段时间了,该接触的也差不多了.后来有一天,以为同事问我,如何向redis中 ...
随机推荐
- Mybaties配置一对多关系sql实例
<!-- resultMap中的type表示返回什么类型的对象 --> <resultMap id="BaseGoods" type="com.cn.h ...
- VS code 的使用
VS code 是一个非常不错的代码编辑器.它不依赖与任何编译器或者解释器,但却能高效的利用第三方编译器或解释器来给用户提供良好的代码编写环境. 我喜欢VS code的三点,丰富强大的插件,快捷的语法 ...
- 研究旧项目, 常用 sql 语句
1. select all table select TABLE_NAME from CodingSystem.INFORMATION_SCHEMA.TABLES where TABLE_TYPE = ...
- Java lesson08 Homework
1:1. 写一个类Param,声明四个成员变量a.b.c.d,分别赋予四种访问权限. (1)试验在同一个包中的另一个类里能访问哪几个变量? (2)试验在不同包中的另一个类里能访问哪几个变量? (3)试 ...
- 重拾MVC——第一天:数据库连接与SqlDbHelper
这个 SqlDbHelper 是我参考网上的和以前用过的 SqlDbHelper 自己写的一个非常简单的东西,主要是记录自己的学习情况 首先在Web.config中配置数据库连接字符串: <co ...
- localStorage、sessionStorage和cookie的区别
本地客户端(浏览器)查看三者信息: HTML4的本地存储:cookie 浏览器的缓存机制提供了可以将用户数据存储在客户端上的方式,可以利用cookie,session等根服务端进行数据交互. 一.co ...
- element ui的照片墙 默认显示照片
参考地址: element ui的照片墙 默认显示照片 照片显示的数据格式是:[{name: '', url: ''}],:file-list=""默认显示的图片 实际项目开发中需 ...
- Centos7.7安装expect命令工具
简单介绍 expect是一个免费的编程工具,用来实现自动的交互式任务,而无需人为干预.说白了,expect就是一套用来实现自动交互功能的软件. 在实际工作中,我们运行命令.脚本或程序时,这些命令.脚本 ...
- STM32工程模版
STM32工程模版,看过来 ST库源码去官方下载 创建工程目录 doc:存放说明文档 lib:存放库文件 listing:存放编译产生的中间文件 output:存放生成的文件 project:存放工程 ...
- [LeetCode] 40. Combination Sum II ☆☆☆(数组相加等于指定的数)
https://leetcode.wang/leetCode-40-Combination-Sum-II.html 描述 Given a collection of candidate numbers ...