2015-09-03 66 views
0

我正在學習C++,並有一個關於類和包裝的問題。我正在撰寫一個覆盆子pi的應用程序。我有一個名爲SensorClass的類,它的方法從連接到板上的各種傳感器讀取數據。C++包裝類SQLite的建議

class SensorClass { 
public: 
SensorClass();         
virtual ~SensorClass();       
int getTemperature();    
int getPressue(); 
; 

我想在讀取數據時將數據寫入本地sqlite數據庫。在SQLite網站上有許多包裝類。

SQLite wrappers

我不知道是否在已讀它,我應該使用這些之一例如插入數據到數據庫中。

我在想,然後我會分離代碼,只是調用getTemperature()函數中的SQLite insert方法。這是個好主意嗎?我應該使用哪種包裝?

Example SQlite wrapper class

我也可以硬編碼在這樣的getTemperature()方法的數據庫操作。

int SensorClass::getTemperature(){ 

// read temperature 

//insert into database 

/* Create SQL statement */ 
sql = "INSERT INTO DATAPOINTS (Temperature) " \ 
    "VALUES (15); " \ 


/* Execute SQL statement */ 
rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg); 

} 

謝謝你的建議

回答

0

它通常會更好地將兩件事情分開。即讓傳感器等級做好工作,對傳感器進行良好的檢測,只有這一點。

然後有一個單獨的類來完成將傳感器數據記錄到數據庫的工作。您可能會發現最好將整行插入到數據庫中。而且你也可能決定你只想以固定的採樣率定期記錄數據。

然後,在您的主應用程序循環/通過事件驅動計時器,您可以做測量和記錄數據作爲單獨的步驟。

例如

void APP_tick(void) 
{ 
    SensorValues values = sensors.readValues(); 
    logger.writeValues(values); 
} 

通過分離的責任,你就可以改變記錄器類出輕鬆 - 你可能最終決定你不想使用數據庫,寧願只要登錄數據到平面文件,以便使用減少磁盤空間並提高性能。

如果使用SQLite,那麼您可能會發現值得使用預準備語句來避免每次執行時都要編譯SQL查詢(這在CPU上是昂貴的,並且您在相當有限的系統上運行該語句)。

+0

非常感謝您的幫助。 – riverrock