Las mejores prácticas y preguntas frecuentes de mysql (base de datos) de QT

Cuando se trata de la base de datos, en primer lugar, Amway tiene un software Navicat Premium, que es muy conveniente para consultar la base de datos. 

El controlador QMysql es un complemento utilizado por el módulo Qt SQL para comunicarse con la base de datos MySQL. Para compilar el controlador QMysql, debe cumplir las siguientes condiciones:

  • Debe instalar la biblioteca cliente de MySQL y los archivos de encabezado de desarrollo, que generalmente se proporcionan con el programa de instalación de MySQL, o se pueden descargar desde el sitio web oficial de MySQL . Tenga en cuenta que debe elegir el archivo de biblioteca de base de datos correcto de acuerdo con su arquitectura Qt (32 o 64 bits).
  • Debe obtener el código fuente de Qt, que se puede descargar desde el sitio web oficial de Qt . Puede elegir el código fuente que coincida con su versión de Qt, o puede elegir el código fuente más reciente.
  • Necesita usar qmake y herramientas make para compilar el controlador QMysql Estas herramientas generalmente se proporcionan con el programa de instalación de Qt, o se pueden descargar desde el sitio web oficial de Qt . Tenga en cuenta que debe elegir la herramienta correcta para su sistema operativo y compilador.

Dado que la versión actual de Qmysql de QT no se instala durante la instalación, debe compilar este archivo dll usted mismo.

Los pasos para compilar los archivos dll relevantes de QMysql son los siguientes:

  • Abra el símbolo del sistema de Qt e ingrese la carpeta qt/src/plugins/sqldrivers/mysql en el directorio del código fuente de Qt, por ejemplo:
F:\QT\5.12.9\Src\qtbase\src\plugins\sqldrivers\mysql

Luego comente la siguiente línea de código: y configure la dirección de mysql, como se muestra a continuación:

Copiar

  • Ejecute el comando qmake, especificando las rutas de los archivos de encabezado y los archivos de biblioteca de MySQL, por ejemplo:

INCLUDEPATH += "E:/mysql/mysql-5.7.27-winx64/include"
DEPENDPATH += "E:/mysql/mysql-5.7.27-winx64/include"
LIBS += "E:/mysql/mysql-5.7.27-winx64/lib/libmysql.lib"
DESTDIR = ../mysql/mylib

Copiar

  • Ejecute el comando make o mingw32-make y seleccione el comando apropiado según su tipo de compilador (si usa sql en el entorno VS, solo necesita compilar bajo el compilador VS), por ejemplo:
mingw32-make

Copiar

  • Si la compilación es exitosa, verá un archivo llamado qsqlmysql.dll en el directorio actual, que es el complemento QMysql. Debe copiar este archivo en la carpeta qt/plugins/sqldrivers en el directorio Qt donde ejecuta la aplicación Qt, por ejemplo:
F:\QT\5.12.9\msvc2017_64\plugins\sqldrivers

Lo anterior es nuestro trabajo de preparación:

Luego es cómo usar la función Qmysql en QT; primero, primero debemos importar el archivo de encabezado, el archivo es el siguiente:

#include <QtSql/QSqlDatabase>	// 连接数据库
#include <QtSql/QSqlError>		// 数据库连接失败打印报错语句
#include <QtSql/QSqlQuery>		// 数据库操作(增删改查)
#include <QSqlQueryModel>

Definí el nombre de la función para escribir en el archivo cpp:

 Q_OBJECT
public:
    mysql(QWidget *parent);
    ~mysql();
    void insert(QString InserName,int id,QString symbol,QString value);
    void insert_line(QString InserName,QString id,QString symbol,QString value,QString v,QString despoitory);

    void data_connect(bool,bool);//连接数据库
    void data_test_connect(QStringList);//测试能否成功连接数据库
    void close_data();
    void creat_table(QString TableName);//创建一个表
    void update_table(QString InserName,QString id,QString key,QString value);//更新数据库
    void delete_table(QString TableName,QString id);//删除数据库
    void find_alltable(QString datebase);//查找所有数据路表格
    void find_table_inf(QString TableName);//查询某个表中的数据
    void find_table_row(QString TableName,QString row_name,QString col_name);//查询表中某一行的数据
    void find_table_col(QString TableName,QString col_name);//表名,列名
    void find_table_desposite(QString TableName,QString col_name);//表名,列名查询储位名

En el nombre de la función correspondiente, las funciones implementadas son las siguientes:

El primero es conectarse a la base de datos parte de la función.

QSettings *myini=new QSettings("info.ini", QSettings::IniFormat);//构造QSettings对象,访问ini文件
        QStringList info_digitial={"digitial_type","hostname","port","database_name","user_name","password"};
        QStringList s;
        //设置键值对
        s.clear();
        myini->beginGroup("digital");
        for(int i=0;i<info_digitial.size();i++)
        {
           s.append(myini->value(info_digitial[i]).toString());
        }
        myini->endGroup();
        delete myini;
    //输出可用数据库
        qDebug()<<"available drivers:";
        QStringList drivers = QSqlDatabase::drivers();
        foreach(QString driver, drivers)
        qDebug()<<driver;//输出中含有MySQL,那么恭喜你说明你的qt有MySQL驱动了

        QSqlDatabase db = QSqlDatabase::addDatabase(s[0]);
        db.setHostName(s[1]);
        db.setPort(s[2].toInt());
        db.setDatabaseName(s[3]);//数据库名
        db.setUserName(s[4]);//用户名
        db.setPassword(s[5]);//密码
        bool ok = db.open();//打开并连接数据库
        if(message_prompt)
        {
            if (ok){
                QMessageBox::information(this, "infor", "success connect");
            }
            else {
                QMessageBox::information(this, "infor", "open failed");
                qDebug()<<"error open database because"<<db.lastError().text();
            }
        }

Aquí obtengo la configuración de la base de datos leyendo la información almacenada en el archivo ini, que incluye principalmente: 

Defina una base de datos del objeto QSqlDatabase, ejecútelo, si se puede conectar con éxito, devolverá un valor booleano, aquí uso este valor booleano para juzgar si se conectó con éxito a la base de datos.

Luego crea una tabla en la base de datos e inserta valores en ella:


    QSqlQuery query;
    QString sql=QString("create table %1(订单号 text, 料号 text, 品名 text, 数量 text,储位 text);").arg(TableName);//"订单号","料号","品名","数量"
    qDebug()<<"SQL"<<sql;

    //创建表是否成功

    if (!query.exec(sql))//.exec(),作用是开启一个循环,执行一个事件,相当于while(1)

    {
        qDebug() << QString::fromLocal8Bit("creat table failed:") << query.lastError();

    }

    else

    {
        qDebug() << QString::fromLocal8Bit("creat table success!");

    }

La función de insertar datos en la tabla de la tabla se implementa de la siguiente manera:

 QSqlQuery query;
       QString str=QString("insert into %4(序号,标签,value) values(%1,'%2','%3')").arg(id).arg(symbol).arg(value).arg(InserName);
       if(query.exec(str)==false)
       {
            qDebug() << "insert failed";
            QMessageBox::warning(this,u8"数据插入错误",u8"请检查数据是否正确");
       }
       else
       {
           QMessageBox::information(this, "insert", "insert connect");
            qDebug() <<"insert success";
       }

La función de actualizar datos se realiza, y la parte del código es la siguiente:

    QSqlQuery query;
    QString updata = QString("update %1 set  %2='%3' where 订单号='%4'").arg(InserName).arg(column).arg(value).arg(row);
    qDebug()<<"--update--"<<updata;
    if (!query.exec(updata))
    {
        qDebug() << QString::fromLocal8Bit("updata failed!") << query.lastError();
    }
    else
    {
        qDebug() << QString::fromLocal8Bit("updata success!");
    }

Anteriormente mencionamos cómo crear una tabla de base de datos e implementar la función de insertar datos. A continuación, hablemos sobre la línea de visión y la parte del código de la función de eliminación de la base de datos, como se muestra a continuación:

     QSqlQuery query;
     QString sql = QString("delete from %1 where  订单号 = '%2'").arg(TableName).arg(id);
     if(query.exec(sql))
     {
         qDebug()<<"delete success!";
     }
     else
     {
         qDebug()<<"delete failed!";
     }

Supongo que te gusta

Origin blog.csdn.net/Helloorld_1/article/details/132297907
Recomendado
Clasificación