void sqlite_init() {
sqlite3_initialize();
ts.add(3, 60000, [&](void*) {
String tIn = (String)GettIn();
String tOut = (String)GettOut();
String humidity = (String)Gethumidity();
String pressure = (String)Getpressure();
String str = "INSERT INTO day_p (cyear, cmonth, cday, chour, cmin, tin, tout, vlag, davl) ";
str += "VALUES (" + String(cyear) + ", " + String(cmonthnum) + ", " + String(cdayofmonth) + ", " + String(chour) + ", " + String(cmin);
str += ", " + tIn + ", " + tOut + ", " + humidity + ", " + pressure + ");";
str += "DELETE FROM day_p WHERE (cday <> " + String(cdayofmonth) + " AND chour < " + String(chour) + ") ";
str += "OR (cday <> " + String(cdayofmonth) + " AND chour = " + String(chour) + " AND cmin <= " + String(cmin) + ");";
db_exec(str.c_str());
}, nullptr, true);
}
void db_exec(const char *sql) { // Основная функция обработки SQL-запросов
sqlite3 *db;
int rc;
//sqlite3_stmt *res;
//int rec_count = 0;
//const char *tail;
const char *dbf = "/weather.sql3"; // Определяем константу со ссылкой на драйвер базы данных в VFS
char *ErrMsg = 0; // Переменная для сообщений об ошибках обработки SQL-запросов
const char* data = 0; // Константа, содержащая заголовок вывода для функции callback (0 - не используется)
Serial.println(sql);
File db_file_obj; // Определяем объект типа файл для работы с VFS
vfs_set_spiffs_file_obj(&db_file_obj); // Инициализируем ссылку на объект в VFS (непосредственно перед открытием файла в SPIFFS)
if (sqlite3_open(dbf, &db)) { // Инициализируем отрытие базы данных и, если не получилось,
Serial.print(F("Can't open database: ")); // Выводим уведомление об ошибке
Serial.println(sqlite3_errmsg(db)); // Выводим саму ошибку
return; // Прерываем выполнение функции
}
else Serial.println("DB opened");
rc = sqlite3_exec(db, sql, callback, (void*)data, &ErrMsg); // Вызываем функцию обработки SQL-запроса
if (rc != SQLITE_OK) { // Если не удалось обработать запрос,
Serial.print(F("SQL error: ")); // Выводим сообщение об ошибке
Serial.println(ErrMsg); // Выводим детализированную информацию об ошибке
sqlite3_free(ErrMsg); // Стираем ошибку
}
Serial.println(rc);
sqlite3_close(db); // Закрываем соединение с базой данных
}
static int callback(void *data, int argc, char **argv, char **azColName) { // Фукция, вывода ряда значений ряда ответа на SQL-запрос
for (int i = 0; i < argc; i++){ // Цикл перебора содержащихся в ответе значений
if (i > 0) // Если значений в ответе больше одного
Serial.print(" | "); // Выводим разделитель
Serial.print(argv[i]); // Выводим значение
}
Serial.println(); // Перевод строки (для красоты)
return 0; // Возвращаем 0
}
void handledbdata() {
}