Qt将数据库的表导出为CSV文件

简述:

CSV,Comma Separated Value(逗号分隔值),通常都是纯文本文件,以行为单位,每行记录多项数据,每项数据用逗号 来分隔(标准英文逗号)。

本文主要介绍将数据库的表导出为CSV文件,支持中文

系统:Qt + linux

1、写入CSV文件

/**
 * @brief creatCSVFile()
 * 创建CSV文件
 * @return
 */
void creatCSVFile()
{
    QString tablehead;
    tablehead = "StudentName, School, Sex, StudeId, Class, Grade, Hobby, \n";
    readAllDataFromSqlWriteToCSV("tb_Student","/home/tb_Student.csv",tablehead);
}

/**
 * @brief readAllDataFromSqlWriteToCSV
 * 将数据库xx表的所有数据写入CSV文件
 * @return
 */
void readAllDataFromSqlWriteToCSV(const QString &tableName, const QString &csvFileName, QString tablehead)
{
    if(csvFileName.isEmpty())
      return;
      //打开.csv文件
      QFile csvFile(csvFileName);
      if(!csvFile.open(QIODevice::WriteOnly))
      {
          qDebug()<<QString("Cannot open %1 for writing").arg(csvFile.fileName());
          return;
      }
      QSqlQuery query(db);
      QString sql;
      QString strString;
      QByteArray head = tablehead.toLocal8Bit();
      QByteArray rowData;

      QTextCodec *code = QTextCodec::codecForName("GB2312");       //解决中文乱码问题
      QTextCodec::setCodecForTr(code);
      QTextCodec::setCodecForLocale(code);
      QTextCodec::setCodecForCStrings(code);

      csvFile.write(head.data());
      sql ="select * from " + tableName;
      query.prepare(sql);
      if(query.exec(sql))
      {
          QSqlRecord sqlRecord = query.record();
          while(query.next())
          {
              strString.clear();
              rowData.clear();
              //sqlRecord.count():获取列
              for(int i = 0;i < sqlRecord.count(); i++)
              {
                  QString value = query.value(i).toString();
                  if(value.contains(","))
                  {
                      value.replace(",",";");
                      strString += value + ", ";
                  }
                  else
                  {
                      strString += query.valu
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值