常见处理数据库数据前要将数据可视化或者显示到前端,这就不得不需要完成系统对数据库的初始化和链接操作。
(1)开启Mysql服务;
(2)链接navicate到mysql并测试是否连接成功
(3)打开ODBC服务并创建用户SDN和系统SDN,根据本机的不同位数选择合适的平台32/64位。添加成功后测试连接。
这里的服务器IP地址选择的回环地址,端口可自己设置但后面连接是要用到。
Sql_connected()函数中设置的参数与此处设置的一一对应。
Data Source Name自己命名后续连接也用得到;
Description可以随便填;
User,Password需要填自己的数据库用户名和密码;
Database是选择的数据库(后续需要操作的数据库)如这里选择的supmarketmanage,则连接上之后操作的就是数据库中的这个数据库
至此,准备工作完成,后面将介绍Qt部分。
(1)构建文件中添加sql模块
函数类:initializesql.class
(2)操作函数的头文件 initializesql.h
源代码:
#ifndef CTC_INITIALIZESQL_H #define CTC_INITIALIZESQL_H #include <QObject> #include <QApplication> #include <QDebug> #include <QSqlDatabase> #include <QSqlQuery> #include <QSqlQueryModel> #include <QSqlError> class ctc_InitializeSql : public QObject { Q_OBJECT public: explicit ctc_InitializeSql(QObject *parent = nullptr);
/* * 连接数据库 ************/ bool Sql_connected();
/* * sql执行语句 * 参数一:sql语句 ****************/ bool Sql_Executethestatement(QString Statement); private: QSqlDatabase db;
}; #endif // CTC_INITIALIZESQL_H
(3)操作函数的源文件 initializesql.cpp
源代码:
/************************************
Created 2023.12.16 23:27
执行qt连接并操作mysql数据库的封装类
************************************/
#include "ctc_initializesql.h"
ctc_InitializeSql::ctc_InitializeSql(QObject *parent) : QObject(parent)
{
}
bool ctc_InitializeSql::Sql_connected()
{
//输出支持的驱动
//qDebug() << "支持的数据库驱动有:" << QSqlDatabase::drivers();
//连接数据库
db = QSqlDatabase::addDatabase("QODBC");
db.setHostName("127.0.0.1");
db.setPort(3307);
db.setDatabaseName("Mydata");
db.setUserName("root");
db.setPassword("123456");
bool ok = db.open();
if (ok){
qDebug()<<"open successful!";
//输出可用表
QStringList tables = db.tables();
foreach(QString table, tables)
qDebug()<<table;
}
else {
qDebug()<<"数据库打开失败 "<<db.lastError().text();
}
}
bool ctc_InitializeSql::Sql_Executethestatement(QString Statement)
{
Sql_connected();
bool isOk = db.open();
if(!isOk){
qDebug()<<"error info :"<<db.lastError();
}
else{
QSqlQuery query;
query.prepare(Statement);
if(!query.exec()){
qDebug()<<"query error :"<<query.lastError();
}
else{
qDebug()<<"creat table success!";
}
}
db.close();
}
添加完该类之后 在其他类测试:
测试结果:执行sql语句成功