QT中MYSQL数据库数据导出为CSV

结构:


第一步

.pro文件中添加sql

第二步

UI界面

第三步

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QtSql>
#include <QSqlDatabase>
#include <QMessageBox>
#include <QSqlQuery>
#include <QSqlError>
#include <QDebug>
#include <QDesktopServices>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    void Creat_table();

private slots:
    void on_pushButton_clicked();

private:
    Ui::MainWindow *ui;
     QSqlDatabase db;

};
#endif // MAINWINDOW_H

第四步

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("127.0.0.1");
    db.setPort(3306);
    db.setUserName("root");
    db.setPassword("123456");
    db.setDatabaseName("excelTest");//第一次运行else语句,此句注释,以后此句需要放出来
    bool ok = db.open();
    if (!ok)
        qDebug()<<"error open database because"<<db.lastError().text();
//else语句仅在最开始运行,运行一次后,数据库名创建完成,以后每次运行注释掉
    //    else
    //    {
    
    //        db.exec("CREATE DATABASE IF NOT EXISTS excelTest");
    //        db.setDatabaseName("excelTest");
    
    //        //关闭数据库重新打开保证设置数据库名字生效
    //        db.close();
    //        if (!db.open())
    //        {
    //            qDebug()<<"Mysql数据库重启失败";
    //        }
    //        Creat_table();
    //    }
    
}

MainWindow::~MainWindow()
{
    delete ui;
}

//创建表test
void MainWindow::Creat_table()
{
    QSqlQuery query;
    QString str="CREATE TABLE `test`\
            (num_1 int(11) NULL DEFAULT NULL,\
             num_2 int(11) NULL DEFAULT NULL,\
             num_3 int(11) NULL DEFAULT NULL,\
             num_4 int(11) NULL DEFAULT NULL,\
             id int(11) NOT NULL, PRIMARY KEY (`id`) USING BTREE\
             );";
    query.prepare(str);
    if(!query.exec()){
        qDebug()<<"query error :"<<query.lastError();
    }
    else{
        qDebug()<<"creat table success!";
    }
}

//将数据库数据导出为CSV格式
void MainWindow::on_pushButton_clicked()
{   
    
    qDebug()<<"开始3";
    QStringList data;
    QSqlQuery query;
    QStringList lineData;
    QString fileData;
    int count=1;
    query.exec("select num_1,num_2,num_3,num_4 from test");
    //把数据存入表格里面
    while(query.next())
    {
        QString index=QString::number(count);
        data.append(index);
        data.append(query.value("num_1").toString());
        data.append(query.value("num_2").toString());
        data.append(query.value("num_3").toString());
        data.append(query.value("num_4").toString());
        count++;
    }
    qDebug()<<data.length()<<count;
    
    for(int i=0;i<data.length();i+=5){
        lineData.clear();
        lineData.append(data[i]);
        lineData.append(data[i+1]);
        lineData.append(data[i+2]);
        lineData.append(data[i+3]);
        lineData.append(data[i+4]);
        fileData+=lineData.join(',')+"\n";//每列数据以“,”分割,每行以“\n”分割
    }
    //创建表单
    QStringList tableHead;
    tableHead.append("序号");
    tableHead.append("数字一");
    tableHead.append("数字二");
    tableHead.append("数字三");
    tableHead.append("数字四");
    QString tableHeadStr=tableHead.join(',')+"\n";
    
    QString path= QFileDialog::getSaveFileName(nullptr,tr("导出数据"), "/",
                                               tr("csv File (*.csv)"));
    if(path.isEmpty())return;
    QFile outFile(path);
    outFile.open(QIODevice::WriteOnly| QIODevice::Text);
    QTextStream streamFileOut(&outFile);
    streamFileOut.setCodec("GBK");
    streamFileOut << tableHeadStr<<fileData;
    streamFileOut.flush();
    outFile.close();
    fileData.clear();
    QDesktopServices::openUrl(QUrl::fromLocalFile(path));
    
}

效果

数据库数据

导出数据

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值