(十八)链接数据库,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中 ...
随机推荐
- Spring4学习回顾之路12-事务
事务:事务就是一系列的动作,它们被当做一个单独的工作单元,这些动作要么全部完成,要么全部不起作用:事务管理是企业级应用程序开发中必不可少的技术,用来确保数据的完整性和一致性.事务的四个关键属性(ACI ...
- 数据的特征预处理?(归一化)&(标准化)&(缺失值)
特征处理是什么: 通过特定的统计方法(数学方法)将数据转化成为算法要求的数据 sklearn特征处理API: sklearn.preprocessing 代码示例: 文末! 归一化: 公式: ...
- Centos7搭建在线yum源
1: 首先关闭防护墙或者设置规则通过且关闭selinux Systemctl diablefirewalld 永久关闭防火墙 vim/etc/sysconfig/selinux 并修改SELINUX ...
- Istio技术与实践02:源码解析之Istio on Kubernetes 统一服务发现
前言 文章Istio技术与实践01: 源码解析之Pilot多云平台服务发现机制结合Pilot的代码实现介绍了Istio的抽象服务模型和基于该模型的数据结构定义,了解到Istio上只是定义的服务发现的接 ...
- 简单分析synchronized不会锁泄漏的原因
最近看到一句话:内部锁synchronized不会造成锁泄漏(Lock Leak). 锁泄漏是指一个线程获得某个锁以后,由于程序的错误.缺陷致使该锁一直没法被释放而导致其他线程一直无法获得该锁的现象. ...
- 抽奖JQ
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- js面向对象的几种方式
对象的字面量 var obj={}:创建实例对象 var obj=new Object();构造函数模式 function fn(){}, new fn();工厂模式:用一个函数,通过传递参数返回对象 ...
- XWork配置示例
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE validators PUBLIC ...
- 关于google开源的Material Design说明
原文地址:https://github.com/MaterialDesignInXAML/MaterialDesignInXamlToolkit/wiki/Getting-Started 源码地址:h ...
- Django + mysql 在创建数据库出错
错误:django.db.utils.OperationalError: (1366, "Incorrect string value: '\\xE6\\x96\\x87\\xE7\\xAB ...