C ++包装类SQLite建议

时间:2015-09-03 11:20:17

标签: c++ sqlite wrapper

我正在学习C ++并且对类和包装器有疑问。我正在编写一个覆盆子pi的应用程序。我有一个名为SensorClass的类,其方法从连接到电路板的各种传感器读取数据。

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

我想在读取数据时将数据写入本地sqlite数据库。在SQLite网站上有许多包装类。

SQLite wrappers

我想知道是否应该使用其中之一来例如在读取数据时将数据插入数据库。

我想我会分离代码,只是在insert函数中调用SQLite 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);

}

感谢您的建议

1 个答案:

答案 0 :(得分:0)

将这两件事分开通常会更好。即使传感器类能够很好地感知物品,并且只做那件事。

然后有一个单独的类,它可以很好地将传感器数据记录到数据库中。您可能会发现最好一次性将整行插入数据库。您也可能决定只想以固定的采样率定期记录数据。

然后在主应用程序循环中/通过事件驱动的计时器,您可以进行测量并将数据记录为单独的步骤。

e.g。

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

通过分离责任,您可以轻松地更改记录器类 - 您可能最终决定不想使用数据库,而只是将数据记录到平面文件中以便使用更少的磁盘空间和提高绩效。

如果使用SQLite,那么您可能会发现使用预准备语句是值得的,以避免每次执行时都必须编译SQL查询(这在CPU方面很昂贵,并且您在相当有限的系统上运行它)。