使用Qt从excel读取数据至数据库

一、前言

本文介绍了一种在Qt平台将excel表格的数据读取至数据库QSQLite的方法。思路为:先将excel表格转为csv文件,若原表格中存在着中文,还需将csv的编码格式转为UTF-8,接着由QFile打开该csv文件,将每一行的数据读出,并写入创建的数据库表格。

二、将excel表格转为csv文件

首先需要将保存了需要读取至数据库的excel表格保存为csv文件,如下为实例excel表格,直接另存为csv文件。这里excel保存的是身份证前6位对应的地区名。

使用Qt从excel读取数据至数据库_第1张图片

由于excel中存在中文,故需将编码格式改为UTF-8,用记事本打开csv文件,然后在文件->另存为,设置如下,另存为sfzqjw_UTF8.csv文件

使用Qt从excel读取数据至数据库_第2张图片

三、Qt读取csv中数据并保存至新建数据库的表中

//connection.h
#ifndef CONNECTION_H
#define CONNECTION_H
#include 
#include 
#include 
#include 
#include 
#include 
#include 

static bool createConnection()
{
    //读取csv数据到数据表
    QFile file("E:/PracticeOfQt/Id_recognition/sfzqjw_UTF8.csv"); //打开csv文件
    if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
     {
          std::cerr << "Cannot open file for reading: "
                    << qPrintable(file.errorString()) << std::endl;
          return false;
     }

      //将csv_utf8转为数据库中的表District保存
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("mydb.db");
    if(!db.open())
    {
        QMessageBox::critical(0 , "Can not open database",
                              "Unable to establish a database connection.",QMessageBox::Cancel);
        std::cerr<<"stop!";
        return false;
    }

    QSqlQuery query;  //默认打开
    query.exec("create table District(id int primary key, province varchar(25),"
               "city varchar(25),county varchar(25))");

    QStringList list;
    list.clear();
    QTextStream in(&file);  //QTextStream读取数据

    int idNumber;

    while(!in.atEnd())
    {
       QString fileLine = in.readLine();  //从第一行读取至下一行
       list = fileLine.split(",", QString::SkipEmptyParts);

       idNumber = list.at(4).toInt();
       query.prepare("INSERT INTO District (id, province,city,county) VALUES (:idVal,:Pro,:City,:County)"); //准备执行SQL查询
       query.bindValue(":idVal", idNumber);   //绑定要插入的值
       query.bindValue(":Pro", list.at(1));
       query.bindValue(":City", list.at(2));
       query.bindValue(":County", list.at(3));

       query.exec();
    }
    query.clear();
    db.close();

    return true;
}

四.在main函数中由SQL条件查询查询数据库中对应的地区

Main函数首先运行了connection.h中createConnection()函数,读取csv中数据并保存至新建数据库的表中,接着打开已创建的数据库mydb.db,由条件查询查询id对应的地区,由qDebug()输出。
//main.cpp
#include "connection.h"
#include 
#include 
#include 
#include 

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    if(!createConnection())
    {
        std::cerr<<"Can not create connection";
        return -1;
    }

    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("mydb.db");
    if(!db.open())
    {
        QMessageBox::warning(NULL,QObject::tr("初始化数据库"),QObject::tr("数据库文件打开故障!"));
    }
    QSqlQuery query(db);

    int queryId = 441223;  //要查询的身份证前6位,保存至变量
    query.prepare("select * from District WHERE id ==? "); //id号码唯一的
    query.addBindValue(queryId);  //query的绑定机制绑定变量
    query.exec();

    QString place = "";
    while(query.next())
    {
        for(int i = 1; i < 4 ;++i)
            place += query.value(i).toString();
    }
    qDebug()<<"编号为"<

五、运行结果

Main函数中设置了查询编号441223对应的身份证所在市县,qDebug()输出结果如下:

使用Qt从excel读取数据至数据库_第3张图片

你可能感兴趣的:(opencv)