1. 程式人生 > >使用Qt從excel讀取資料至資料庫

使用Qt從excel讀取資料至資料庫

一、前言

本文介紹了一種在Qt平臺將excel表格的資料讀取至資料庫QSQLite的方法。思路為:先將excel表格轉為csv檔案,若原表格中存在著中文,還需將csv的編碼格式轉為UTF-8,接著由QFile開啟該csv檔案,將每一行的資料讀出,並寫入建立的資料庫表格。

二、將excel表格轉為csv檔案

首先需要將儲存了需要讀取至資料庫的excel表格儲存為csv檔案,如下為例項excel表格,直接另存為csv檔案。這裡excel儲存的是身份證前6位對應的地區名。


由於excel中存在中文,故需將編碼格式改為UTF-8,用記事本開啟csv檔案,然後在檔案->另存為,設定如下,另存為sfzqjw_UTF8.csv檔案


三、Qt讀取csv中資料並儲存至新建資料庫的表中

<span style="font-size:18px;">//connection.h
#ifndef CONNECTION_H
#define CONNECTION_H
#include <QMessageBox>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QFile>
#include <iostream>
#include <QTextStream>
#include <QDebug>

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;
}</span>

四.在main函式中由SQL條件查詢查詢資料庫中對應的地區

Main函式首先運行了connection.h中createConnection()函式,讀取csv中資料並儲存至新建資料庫的表中,接著開啟已建立的資料庫mydb.db,由條件查詢查詢id對應的地區,由qDebug()輸出。
<span style="font-size:18px;">//main.cpp
#include "connection.h"
#include <QApplication>
#include <QDebug>
#include <QVariant>
#include <QSqlDatabase>

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()<<"編號為"<<queryId<<"的發證地為"<<place;

    db.close(); //關閉資料庫

    return a.exec();
}</span>

五、執行結果

Main函式中設定了查詢編號441223對應的身份證所在市縣,qDebug()輸出結果如下:


相關推薦

使用Qtexcel讀取資料資料庫

一、前言 本文介紹了一種在Qt平臺將excel表格的資料讀取至資料庫QSQLite的方法。思路為:先將excel表格轉為csv檔案,若原表格中存在著中文,還需將csv的編碼格式轉為UTF-8,接著由QFile開啟該csv檔案,將每一行的資料讀出,並寫入建立的資料庫表格。

pandasexcel讀取資料處理的注意事項

##excel中支援的資料型別較pandas多的多 因為從excel讀取的資料型別很多預設是object,資料處理前建議轉換成str等。pandas中當多列同為object時,實際資料不相同。 如merge時 ggg=pd.merge(cs,c,how="inner",lef

java後端伺服器讀取excel資料匯入資料庫

使用的是easypoi,官網文件:http://easypoi.mydoc.io/ 1 /** 2 * 匯入Excel檔案 3 */ 4 @PostMapping("/importTeacher") 5 @ResponseBody 6 publi

用java實現txt文字檔案批量匯入資料資料庫

今天同事讓我準備一個專案的測試資料,要向一個表中插入上千條記錄,並且保證每條記錄內容不同,如果用手工一條一條插入肯定是不可能,也不會有哪個SB去做這樣的事,我最開始想到了用迴圈,但要求插入的記錄內容不能相同,用迴圈實現比較麻煩,於是我想到了將記錄從文字檔案匯入至資料庫(其實

SpringCloud之實現上傳Excel檔案,初始化匯入資料資料庫

1、頁面程式碼如下,彈出窗是用的layer: <input type="button" class="btn_default" style="width: 100px;" onclick="investigation();" value="匯入心理諮詢"/>

一個簡單的txt檔案中讀取資料插入資料庫

一: 首先我們應該先·建一個Dynamic web project 工程。 二: 定義一個讀檔案操作 package com.what.files; 在這裡我們要用到用於讀取本地檔案中的位元組資料的FileInputStream,FileInputStream繼承了Inpu

3月28日 【EXCEL讀取輸入數據庫】

conn base execute xls mit 數據 遇到 into pass #從excel讀取數據寫入mysqldef excel_to_mysql(filename): ip = ‘133.0.186.3‘ port = 11521 SID =

tensorflow--檔案讀取資料

讀取資料-csv tensorflow讀取資料流程 構造檔案佇列 讀取佇列內容 reader = tf.TextLineReader() 解析成一個樣本資料 example, label = tf.decode_csv(value, record_defaults

jQueryAjax++servlet+json實現頁面載入時後臺讀取資料

在eclipse中新建一個專案,我起名為Demo 新建一個html檔案,在其中引入外部jQuery和自定義的js檔案 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <sc

Kafka——Kafka消費者(Kafka讀取資料

KafkaConsumer概念 消費者和消費者群組 假設我們有一個應用程式需要從一個Kafka 主題讀取訊息並驗證這些訊息,然後再把它們儲存起來。應用程式需要建立一個消費者物件,訂閱主題並開始接收訊息,然後驗證訊息井儲存結果。過了一陣子,生產者往主題寫入訊息的速度超過了應用程式驗證資料的

Spring-Boot實現Excel資料匯入資料庫

首先說一下用的工具:jdk8,mysql,mybatis,postman測試, 這次主要是實現歷史學生資訊匯入功能,要求只是提示錯誤資訊,將沒錯的匯入; 好了,貼程式碼 pom匯入依賴,貌似這個poi工具類不向下相容 <dependency> <grou

sparkmysql讀取資料(redis/mongdb/hbase等類似,換成各自RDD即可)

package com.ws.jdbc import java.sql.DriverManager import org.apache.spark.rdd.JdbcRDD import org.apache.spark.{SparkConf, SparkCont

Spark---WC---Spark外部讀取資料之textFile

測試資料 hello spark hello hadoop csdn hadoop csdn csdn hello world 結果 (spark,1) (hadoop,2) (csdn,3) (hello,3) (world,1) import org.

Kafka消費者—— Kafka讀取資料

應用程式使用 KafkaConsumer向 Kafka 訂閱主題,並從訂閱的主題上接收訊息 。 從 Kafka 讀取資料不同於從其他悄息系統讀取資料,它涉及一些獨特的概念和想法。如果不先理解 這些概念,就難以理解如何使用消費者 API。所以我們接下來先解釋這些重要的概念,然

GPU讀取資料到系統記憶體的三種方式

方法一:glReadPixels 首先建立一個fbo,繫結fbo後,attach上需要操作的texture,再進行讀取。 if(fbo == 0) { glGenFramebuffers(1, &fbo); } glBindFramebuffer(GL_F

一個小例子集合xlrd,matplotlib,numpy,scipy使用方法(Excel匯入資料

最近因為一篇論文的原因,要從Excel中取得部分資料平作圖,但是得到的圖都是點陣圖,不是太好插入到論文中,因此,決定使用Python畫圖來解決此問題(不使用MATLAB的原因在於它畫出的圖是在是不好看呀) 首先使用的庫是xlrd庫,此庫的作用是從讀取Exc

利用navicat匯入excel資料資料庫

注意,表頭為欄位名,,必須資料庫中表欄位名一一對應 第二步:檔案另存為CSV格式 第三步:notepad++開啟儲存的csv檔案選擇編碼轉為UTF-8無BOM編碼格式 一直下一步,直到選擇目標表,可以新建表,也可以手動選擇目標表

Jquery載入時後臺讀取資料繫結到dropdownList

 $(document).ready(function () {         loadSchools();      }); function loadSchools() {         var url = "@Url.Action("GetSchools")";

C# Excel匯入資料資料庫

//專案中用到的一個小例子,拿出來和大家分享    ,需要引用  using System.IO; using System.Data.OleDb; /// <summary>     /// Excel資料匯入Datable     /// </summ

flume本地讀取資料錄入到hdfs檔案系統

配置檔案 agent.sources = origin   agent.channels = memorychannel   agent.sinks = target      agent.sources.origin.type = TAILDIR agent.source