Qt–MySql数据库连接
1、QSqlQuery类
提供了对象数据库的数据进行基本的增删查改的操作,主要针对sql语句的描述
2、QSqlTableModel类
建立在QSqlQuery类基础上,对QSqlQuery类重新封装,提供了一个单表操作的可编辑数据模型,不需要针对sql有太多关注,需要了解相关的函数,实现对数据的增删查改
不同数据库在操作时,针对数据库的驱动配置也是不同的
1)在.pro文件下
配置sql模块,让加载到工程中
QT += sql
代表载入了一个文件夹 QtSql
2)测试驱动配置,哪些驱动我们可以使用
QStringList drivers = QSqlDatabase::drivers();
foreach(QString driver, drivers){
qDebug() << driver;
}
ps:mysql驱动安装 将MySQL文件夹lib库文件夹下的
libmysql.dll放入Qt的库文件夹中
代码:
sql.pro
#-------------------------------------------------
#
# Project created by QtCreator 2021-04-19T12:58:38
#
#-------------------------------------------------
QT += core gui
QT += sql
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = ssql
TEMPLATE = app
SOURCES += main.cpp\
widget.cpp
HEADERS += widget.h
FORMS += widget.ui
wigest.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QDebug>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
main.cpp
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210420225819978.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81MDUxMjM4NA==,size_16,color_FFFFFF,t_70#pic_center)
return a.exec();
}
wigest.cpp
#include "widget.h"
#include "ui_widget.h"
#include<QSqlQuery>
#include<QSqlDatabase>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
QStringList drivers = QSqlDatabase ::drivers();
foreach(QString driver,drivers){
qDebug() << driver;
}
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
//2、设置数据连接名称
//2.1 数据放在内存中 ":memory:"
//2.2 数据放在数据库中 "数据库的名称" 如下所示
db.setDatabaseName("wx");
//3、如果连接真实数据库,数据真实存储在数据中
//设置用户名、密码、端口
db.setHostName("localhost");
db.setUserName("root");//设置用户名
db.setPassword("123456");//设置密码
db.setPort(3306);//设置端口
//4、打开数据库
if(!db.open()){
qDebug() << "open database error!";
}
//5、开始操作数据库的数据
QSqlQuery query;//创建一个数据操作的对象
//5.1 创建一张临时的表
query.exec("create table student(id int primary key, name varchar(48))");
//5.2 插入一张的临时数据
query.exec("insert into student values(1,'zhangsan')");
query.exec("insert into student values(2,'lisi')");
query.exec("insert into student values(3,'wangwu')");
//5.3 查询该临时表的基本数据
//查询结果有可能是多条记录
//数据依然存储在query对象中,该对象这时候可以认为他是一个结果的容器对象
query.exec("select * from student");
//5.4 针对query对象遍历,输出显示该对象中的基本数据
//next指向查找到的第一条记录,然后判断是否存在数据,如果存在返回true,
//同时会将指向位置自动移到下一条数据的位置
while(query.next()){
//将数据解析出来,显示
//value(); 重载形式
//value(QString labelname); 参数是真实列名 推荐
//value(int index); 参数是具体的列它的索引位置 从0开始
int id = query.value("id").toInt();
QString name = query.value(1).toString();
//输出显示
qDebug() << id << " " << name;
}
}
Widget::~Widget()
{
delete ui;
}
运行截图:![在这里插入图片描述](https://img-blog.csdnimg.cn/20210420230701682.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81MDUxMjM4NA==,size_16,color_FFFFFF,t_70)
MySql数据库会自动建立student表格如图:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210420225952658.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81MDUxMjM4NA==,size_16,color_FFFFFF,t_70)