1. 程式人生 > >qt中使用sqlite存儲數據

qt中使用sqlite存儲數據

成功 emp sele value 下載 date () export 結構

一、sqilte的安裝

在Windows上安裝SQLite:

請訪問 SQLite 下載頁面,從 Windows 區下載預編譯的二進制文件。

您需要下載 sqlite-tools-win32-*.zipsqlite-dll-win32-*.zip 壓縮文件。

創建文件夾 C:\sqlite,並在此文件夾下解壓上面兩個壓縮文件,將得到 sqlite3.def、sqlite3.dll 和 sqlite3.exe 文件。

添加 C:\sqlite 到 PATH 環境變量,最後在命令提示符下,使用 sqlite3 命令,將顯示如下結果。

C:\>sqlite3
SQLite version 
3.7.15.2 2013-01-09 11:53:05 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite>

二、sqilte的連接

技術分享
 1 /* 名稱:ConnectMySqlite
 2  * 功能:確認數據庫連接
 3  * 輸入:_database需要連接的數據庫
 4  * 返回:true連接成功,false連接失敗
 5  */
 6 bool MySql::ConnectMySqlite(QSqlDatabase &_database)
 7 {
 8     if
(QSqlDatabase::contains(mySqlConnectName)) 9 _database = QSqlDatabase::database(mySqlConnectName); 10 else 11 _database = QSqlDatabase::addDatabase("QSQLITE", mySqlConnectName); 12 _database.setDatabaseName(mySqlName); 13 14 if(!_database.open()) { 15 qDebug()<<"
ConnectMySqlite:SQLite connected failed."; 16 return false; 17 } 18 19 return true; 20 }
ConnectMySqlite

三、qt中QSqlQuery使用

技術分享
 1 /* 名稱:UpdateAlertTableValue
 2  * 功能:更新myAlertTable結構
 3  * 輸入:無
 4  * 返回:0成功,-1數據庫連接失敗-2數據更新不全
 5  */
 6 int MySql::UpdateAlertTableValue()
 7 {
 8     QString sqlSelect = QString("select * from %1").arg(mySqlAlertTableName);
 9     int i=0;
10     bool status = false;
11     QSqlDatabase myDataBase;
12     status = ConnectMySqlite(myDataBase);
13     if(!status)
14     {
15         qDebug()<<"UpdateAlertTableValue>>ConnectMySqlite failed.";
16         return -1;
17     }
18 
19     if(!myDataBase.open())
20         return -1;
21 
22     QSqlQuery query(myDataBase);
23     query.prepare(sqlSelect);
24     if(!query.exec()) {
25         qDebug()<<"exec error:"<<query.lastError();
26     } else {
27         for(i =0;i<6 && query.next();++i)
28         {
29             myAlertTable[i].id = query.value(0).toInt();
30             myAlertTable[i].alertName = query.value(1).toString();
31             myAlertTable[i].alertValue= query.value(2).toInt();
32             myAlertTable[i].alertInterval = query.value(3).toInt();
33             myAlertTable[i].relayStatus0 = query.value(4).toInt();
34             myAlertTable[i].relayStatus1 = query.value(5).toInt();
35             myAlertTable[i].relayStatus2 = query.value(6).toInt();
36             myAlertTable[i].relayStatus3 = query.value(7).toInt();
37             myAlertTable[i].diffQuitiety = query.value(8).toInt();
38         }
39     }
40 
41     if(i!=6)
42         return -2;
43     return 0;
44 }
UpdateAlertTableValue

四、qt中QSqlQueryModel使用

技術分享
 1 /* 名稱:ExportSqliteDataWithModel
 2  * 功能:導出為excel
 3  * 輸入:無
 4  * 返回:無
 5  */
 6 void MySql::ExportSqliteDataWithModel(QDateTime _startDate, QDateTime _endDate, QString filePath)
 7 {
 8     QString path = filePath;
 9     QString sqlSelect = QString("select * from %1 where %1.sampleDate between ‘%2‘ and ‘%3‘ ")
10             .arg(mySqlStormTableName)
11             .arg(_startDate.toString("yyyy-MM-dd hh:mm:ss"))
12             .arg(_endDate.toString("yyyy-MM-dd hh:mm:ss"));
13 
14     bool status = false;
15     QSqlDatabase myDataBase;
16     status = ConnectMySqlite(myDataBase);
17     if(!status)
18     {
19         qDebug()<<"ExportSqliteDataWithModel>>ConnectMySqlite failed.";
20         return;
21     }
22 
23     if(!myDataBase.open())
24         return;
25 
26     QSqlQueryModel *model = new QSqlQueryModel(this);
27     QFile file(path);
28     QTextStream out(&file);
29 
30     if(!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
31         qDebug()<<file.errorString();
32         return;
33     } else {
34         uint excelMaxrows = 1000000;
35         model->setQuery(sqlSelect, myDataBase);
36 
37         while(model->canFetchMore())
38         {
39             model->fetchMore();
40         }
41         qDebug()<<"path:"<<path<<"filename:"<<file.fileName();
42 
43         uint tableRows = model->rowCount();
44         uint64_t row = 0;
45         for(uint i=1;row<tableRows;++i)
46         {
47             if(i!=1)                //如果數據超過1000000行,創建新文件
48             {
49                 path = path.replace(".xls",QString("(%1).xls").arg(i));
50                 file.setFileName(path);
51                 out.setDevice(&file);
52                 if(!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
53                     qDebug()<<file.errorString();
54                     return;
55                 }
56             }
57 
58             for(;row<tableRows && row<excelMaxrows*i;++row)
59             {
60                 QModelIndex indexId = model->index(row,0);
61                 QModelIndex indexHighValue = model->index(row,1);
62                 QModelIndex indexLowValue = model->index(row,2);
63                 QModelIndex indexTempValue = model->index(row,3);
64                 QModelIndex indexSampleData = model->index(row,4);
65 
66                 out<<indexId.data().toInt()<<"\t"<<indexHighValue.data().toDouble()
67                   <<"\t"<<indexLowValue.data().toDouble()<<"\t"<<indexTempValue.data().toDouble()
68                  <<"\t"<<indexSampleData.data().toString();
69                 out<<"\n";
70             }
71             file.close();
72         }
73     }
74 }
ExportSqliteDataWithModel

qt中使用sqlite存儲數據