2015-09-03 4 views
0

Я изучаю C++ и задаюсь вопросом о классах и оболочках. Я пишу заявку на малиновый пи. У меня есть класс под названием SensorClass, методы которого считывают данные с различных датчиков, прикрепленных к плате.C++ класс-оболочка SQLite advice

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

Я хочу записать данные в локальную базу данных sqlite при ее чтении. На веб-сайте SQLite существует несколько классов-оболочек.

SQLite wrappers

мне интересно, если я должен использовать один из них для данных примера вставки в базу данных, когда это было прочитано.

Я думаю, тогда я бы отделил код и просто вызвал, например, метод SQLite insert в функции getTemperature(). Будет ли это хорошей идеей? Какую оболочку я должен использовать?

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-запрос каждый раз, когда вы его выполняете (что дорого в терминах процессора, и вы используете это в довольно ограниченной системе).

+0

Спасибо за ваш отзыв. – riverrock