(十八)链接数据库,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中 ...
随机推荐
- ide的debug
webstom 新建立一个配置项 找到webpack.config.js,最后一行加上 devtool: "source-map" 然后点击debug
- 使用 js 简单的实现 bind、call 、aplly
Function.prototype._call = function(obj,...arg){ var me = this; var k = Symbol("test"); // ...
- 常用bat文件
rmLog.bat @echo offpause >nul | echo 按任意键继续3pause >nul | echo 按任意键继续2pause >nul | echo 按任意键 ...
- upxmake --- upx source compilation
upxmake --- upx source compilation 1. 下载upx所依赖的组件源码 zlib-1.2 http://www.zlib.net/zlib-1.2.11.tar.gz ...
- JDK + Tomcat 安装 + 制作自定义镜像【第 2 篇 Tomcat】
[第 1 篇 JDK]:https://www.cnblogs.com/del88/p/11842387.html[第 2 篇 Tomcat]:https://www.cnblogs.com/del8 ...
- vue中非父子组件的传值bus的使用
非父子之间的组件传值,可以使用vuex.简单的状态管理,也可以用vue bus vue bus可以实现不同组件间.不同页面间的通信,比如我在A页面出发点击事件,要B页面发生变化,使用方法如下: 全局定 ...
- PyInstaller使用教程
简介 PyInstaller是一个第三方库,它能够在Windows.Linux. Mac OS X 等操作系统下将 Python 源文件打包,通过对源文件打包, Python 程序可以在没有安装 Py ...
- 12.SpringMVC核心技术-请求转发和重定向
默认情况下,跳转到指定的View,使用的是请求转发.也可以显示的进行指出 此时,需在setViewName() 指定的视图前添加 forword: , 且此时的视图不会再与视图解析器中的前缀和后缀进 ...
- Python学习记录5-面向对象
OOP 思想 以模块化思想解决工程问题 面向过程 vs 面向对象 由面向过程转向面向对象 常用名词 OO:面向对象 ooa:分析 ood:设计 oop:编程 ooI:实现 ooa -> ood ...
- Swift Review总结一:从 Swift Style 开始
最近凑了几个热心的小伙伴写一些Swift的新手demo(两周后应该能和大家见面了),我参与了review.于是借demo里的代码总结一下新手写Swift要注意的问题,尤其是从oc转到用swift写的开 ...