(十八)链接数据库,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中 ...
随机推荐
- 1.4Zookeeper和Thymeleaf的使用
什么是Zookeeper? Zookeeper 是一个开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务.配置维护和命名服务等等.采用下图描述zookeep ...
- 网络流Dinic--模板
#define IOS ios_base::sync_with_stdio(0); cin.tie(0); #include <cstdio>//sprintf islower isupp ...
- 第三章 VIVADO 自定义IP 流水灯实验
第二章里面已经说过了,MIZ701 PL部分没有输入时钟,因此驱动PL资源必须是通过PS来提供时钟,所以这个流水灯实验也得建立一个最小系统了,然后再添加一个流水灯的自定义IP. 3.0本章难度系数★★ ...
- windows系统 MySQL8.0.12详细安装步骤及基本使用教程
转载 https://blog.csdn.net/xiezhiming1234/article/details/82860339
- 怎样查看Nginx版本号
方法一: 使用 nginx -v nginx -v 方法二: 使用 nginx -V nginx -V 注意: nginx -V 显示的是: 版本号 / 编译器版本 / 配置参数
- SMTP实现发送邮箱2(封装版)
SMTP.h #ifndef __SMTP_H__ //避免重复包含 #define __SMTP_H__ #include <iostream> #include <list> ...
- hdu 2846 字典树变形
mark: 题目有字串匹配的过程 有两点 1.为了高效的匹配子串 可以把所有的子串都预处理进去 然后字典树计数就放在最后面 2.在同一个母串处理自串的时候 会有重复的时候 比如abab 这里去重用个 ...
- Log4net采用外部配置文件和多记录器的方法
1) 创建配置文件,可以放在任意位置,名字可以任意的xml文件 例如,文件名 Log.Config.xml,内容如下 <?xml version="1.0" encoding ...
- 转载:Web安全X-FRAME-OPTIONS 出现两个或多个的原因
转载:https://blog.csdn.net/Teemo_2016/article/details/82051523 在配置文件中配置了 <httpProtocol> < ...
- echarts —— tooltip 鼠标悬浮显示提示框属性
最近一直在使用echarts,当然也被其中的各种属性整的头大,记录一下其中遇到的问题. tooltip:鼠标悬浮时显示的提示框. 今天想要记录的是[自定义提示框的内容],如下图,鼠标悬浮时提示框内显示 ...