Qt连接MySql数据库
Qt连接Mysql
需要先引入mysql的lib目录下中的两个文件libmysql.dll
和 libmysql.lib
x32引入MySQL :: Download MySQL Connector/C (Archived Versions)6.0.9版本以上的这两个文件
x64引入这两个文件即可
需要在 .pro
文件里面引入sql
方式一:
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>// 配置连接mysql服务信息
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setPort(3306);
db.setUserName("root");
db.setPassword("123456");// 检测连接是否成功
if(db.open())
{qDebug() << "连接成功";
}
else
{qDebug() << "连接失败" << db.lastError().text();
}// 调用查询语句
QSqlQuery query;
// query.exec("sql语句");
query.exec("create database bigloong");
query.exec("use bigloong");
QString sql = "create table member(""id int unsigned not null auto_increment primary key, ""username varchar(30) not null unique"")engine=MyISAM default charset=utf8";
query.exec(sql);// 批量插入
// 准备查询的 sql 语句
query.prepare("insert into member values(null, ?)");// 准备填入的数据
QStringList nameList = {"棒槌", "二狗", "胖丫"};// 绑定数据
query.addBindValue(nameList);// 批量添加
query.execBatch();// 批量添加 -2
// 准备查询的 sql 语句
query.prepare("insert into member values(null, :name)");// 准备填入的数据
QStringList nameList1 = {"铁柱", "翠屏"};// 绑定数据
query.bindValue(":name", nameList1);// 批量添加
query.execBatch();// 查询结果
query.exec("select * from 表名");
// 影响的行数
query.numRowsAffected();
// 显示查询结果
while(query.next())
{// 显示方式1qDebug() << query.value(0).toInt() << query.value(1).toString();// 显示方式2qDebug() << query.value("id").toInt() << query.value("username").toString();
}
方式二:
在头文件中的操作
// 只适合单表操作
#include <QSqlTableModel>
// 多表操作
#include <QSqlRelationalTableModel>// 单表只需要 QSqlTableModel *stuModel
QSqlRelationalTableModel *stuModel;
构造函数中的操作
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlRecord>
#include <QItemSelectionModel>
#include <QModelIndexList>
#include <QSqlRelation>
#include <QSqlRelationalDelegate>// 配置连接mysql服务信息
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("127.0.0.1");
db.setPort(3306);
db.setUserName("root");
db.setPassword("123456");
db.setDatabaseName("study");
// 检测连接是否成功
if(!db.open())
{qDebug() << "连接失败" << db.lastError().text();
}
// 查询显示
// 查询 (将student表的数据取出,显示到tableView 中)
this->stuModel = new QSqlRelationalTableModel(this);
//让stuModel模型管理 student 表
this->stuModel->setTable("student");
// 设置关联关系
this->stuModel->setRelation(6,QSqlRelation("dept","dno","dname"));
// 设置关联授权
ui->tableView->setItemDelegate(new QSqlRelationalDelegate(ui->tableView));// 查找
this->stuModel->select();
// 将模型设置到视图上(将模型中保存的数据显示到视图上)
ui->tableView->setModel(this->stuModel);// 修改表头
this->stuModel->setHeaderData(int column,Qt::Horizontal,"文本");// 重设大小
ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::枚举值);// 设置模型的可编辑行
this->stuModel->setEditStrategy(QSqlTableModel::OnManualSubmit);// 以模型方式进行排列
this->stuModel->sort(int column,Qt::SortOrder::规则);
// 以视图方式进行排序
ui->tableView->sortByColumn(int column,Qt::SortOrder::规则);// 通过关键字搜索
// 搜索的关键字
QString keyword = ui->lineEdit->text().trimmed();// 过滤关键字
QString filterStr = QString("sname like '%%1%'").arg(keyword);
// 过滤所需的内容
this->stuModel->setFilter(filterStr);
// 查询所过滤的内容
this->stuModel->select();// 添加
// 先添加一个空行
QSqlRecord record = this->stuModel->record();
// 添加到第几行
int addRow = this->stuModel->rowCount();
// 插入空行
this->stuModel->insertRecord(addRow,record);// 删除
// 获取选中的行
QItemSelectionModel *selectModel = ui->tableView->selectionModel();// 从选中的行中获取对应的索引号的链表
QModelIndexList modelList = selectModel->selectedRows();// 遍历list,获取索引号,再根据索引号从模型中删除
for(QModelIndexList::iterator it=modelList.begin();it!=modelList.end();it++)
{this->stuModel->removeRow(it->row());
}
this->stuModel->submitAll();// 修改
this->stuModel->submitAll();// 撤销所有的操作(增删改)
this->stuModel->revertAll();
this->stuModel->submitAll();