ソースを参照

working on dbSetup class to initalize database on first run

fiffty-50 4 年 前
コミット
6bf7a4d5aa
2 ファイル変更148 行追加11 行削除
  1. 139 11
      dbsetup.cpp
  2. 9 0
      dbsetup.h

+ 139 - 11
dbsetup.cpp

@@ -205,6 +205,26 @@ QStringList views = {
     createViewTimes
 };
 
+/*!
+ * \brief dbSetup::showDatabase Outputs database information to Console
+ */
+void dbSetup::showDatabase()
+{
+    QSqlQuery query;
+
+    query.prepare("SELECT name FROM sqlite_master WHERE type='table'");
+    query.exec();
+    while (query.next()) {
+        qDebug() << "Tables: " << query.value(0).toString();
+    }
+
+    query.prepare("SELECT name FROM sqlite_master WHERE type='view'");
+    query.exec();
+    while (query.next()) {
+        qDebug() << "Views: " << query.value(0).toString();
+    }
+}
+
 /*!
  * \brief dbSetup::createTables Create the required tables for the database
  */
@@ -220,14 +240,11 @@ void dbSetup::createTables()
         }else
             qDebug() << "Adding table " << tables[i].section(QLatin1Char(' '),2,2);
     }
-    //verify tables are created
-    query.prepare("SELECT name FROM sqlite_master WHERE type='table'");
-    query.exec();
-    while (query.next()) {
-        qDebug() << "Table: " << query.value(0).toString();
-    }
 }
 
+/*!
+ * \brief dbSetup::createViews Create the required views for the database
+ */
 void dbSetup::createViews()
 {
     QSqlQuery query;
@@ -241,10 +258,121 @@ void dbSetup::createViews()
             qDebug() << "Adding View " << views[i].section(QLatin1Char(' '),2,2);
         }
     }
-    //verify views are created
-    query.prepare("SELECT name FROM sqlite_master WHERE type='view'");
-    query.exec();
-    while (query.next()) {
-        qDebug() << "View: " << query.value(0).toString();
+}
+
+void dbSetup::csvtest()
+{
+    QStringList firstColumn;
+
+
+    QFile f1("test.csv");
+    f1.open(QIODevice::ReadOnly);
+    QTextStream s1(&f1);
+   // qDebug() << "Stream: " << s1.readAll();
+    while (!s1.atEnd()){
+      QString s=s1.readLine(); // reads line from file
+      qDebug() << s;
+      //firstColumn.append(s.split(",").first()); // appends first column to list, ',' is separator
+      firstColumn.append(s.split(",")[1]);//second Column
     }
+    qDebug() << "First Column: " << firstColumn;
+
+    f1.close();
+}
+
+QVector<QStringList> dbSetup::importAirportsFromCSV()
+{
+    QStringList icao;
+    QStringList iata;
+    QStringList name;
+    QStringList latitude;
+    QStringList longitude;
+    QStringList country;
+    QStringList altitude;
+    QStringList utcoffset;
+    QStringList tzolson;
+
+
+
+    QFile input("airports.csv");
+    input.open(QIODevice::ReadOnly);
+    QTextStream inputStream(&input);
+
+    while (!inputStream.atEnd()) {
+        QString line = inputStream.readLine();
+        auto items = line.split(",");
+        icao.append(items[0]);
+        iata.append(items[1]);
+        name.append(items[2]);
+        latitude.append(items[3]);
+        longitude.append(items[4]);
+        country.append(items[5]);
+        altitude.append(items[6]);
+        utcoffset.append(items[7]);
+        tzolson.append(items[8]);
+    }
+
+    QVector<QStringList> airportData = {
+        icao,
+        iata,
+        name,
+        latitude,
+        longitude,
+        country,
+        altitude,
+        utcoffset,
+        tzolson
+    };
+    for(int i=0; i < airportData.length(); i++)
+    {
+        airportData[i].removeFirst();
+    }
+    //qDebug() << "Airport Data: " << airportData;
+    return airportData;
+}
+
+void dbSetup::commitAirportData(QVector<QStringList> airportData)
+{
+    qDebug() << "Airport Data: " << airportData[0];
+
+    QSqlQuery query;
+    query.prepare("INSERT INTO airports ("
+                  "icao, "
+                  "iata, "
+                  "name, "
+                  "lat, "
+                  "long, "
+                  "country, "
+                  "alt, "
+                  "utcoffset, "
+                  "tzolson"
+                  ") "
+                  "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)");
+    //query.prepare("INSERT INTO airports (icao) VALUES (?)");
+    query.addBindValue(airportData[0]);
+    query.addBindValue(airportData[1]);
+    query.addBindValue(airportData[2]);
+    query.addBindValue(airportData[3]);
+    query.addBindValue(airportData[4]);
+    query.addBindValue(airportData[5]);
+    query.addBindValue(airportData[6]);
+    query.addBindValue(airportData[7]);
+    query.addBindValue(airportData[8]);
+
+    //if (!query.execBatch())
+    //    qDebug() << query.lastError();
+    auto start = std::chrono::high_resolution_clock::now(); // execution timer
+    //code
+    qDebug() << "Updating Airport Database...";
+    query.execBatch();
+    qDebug() << "Error: " << query.lastError();
+    qDebug() << "Airport Database updated...";
+    auto stop = std::chrono::high_resolution_clock::now();
+    auto duration = std::chrono::duration_cast<std::chrono::microseconds>(stop - start);
+    qDebug() << "Time taken: " << duration.count() << " microseconds";
+
+
+/*    for (int i = 0; i < airportData.length(); i++) {
+        qDebug() << "List number " << i << ": " << airportData[i];
+    }*/
 }

+ 9 - 0
dbsetup.h

@@ -22,6 +22,7 @@
 #include <QSqlQuery>
 #include <QSqlError>
 #include <QDebug>
+#include <QFile>
 
 /*!
  * \brief The dbSetup class is responsible for the inital setup of the database when
@@ -33,9 +34,17 @@ class dbSetup
 public:
     static void connect();
 
+    static void showDatabase();
+
     static void createTables();
 
     static void createViews();
+
+    static void csvtest();
+
+    static QVector<QStringList> importAirportsFromCSV();
+
+    static void commitAirportData(QVector<QStringList>);
 };
 
 #endif // DBSETUP_H