Skip to content

Instantly share code, notes, and snippets.

@M0nteCarl0
Created July 31, 2023 18:34
Show Gist options
  • Save M0nteCarl0/66f7909c6472e0a96bce4e597e94f27c to your computer and use it in GitHub Desktop.
Save M0nteCarl0/66f7909c6472e0a96bce4e597e94f27c to your computer and use it in GitHub Desktop.
SQLlite task for fetch data from database and write to textual file
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include "sqlite3.h"
using namespace std;
// Функция обработки результатов запроса к базе данных
static int callback(void* data, int argc, char** argv, char** azColName) {
vector<vector<string>>* rows = static_cast<vector<vector<string>>*>(data);
vector<string> row;
for (int i = 0; i < argc; i++) {
row.push_back(argv[i] ? argv[i] : "NULL");
}
rows->push_back(row);
return 0;
}
int main(int argc, char* argv[]) {
if (argc < 2) {
cout << "Usage: " << argv[0] << " <database_file>" << endl;
return 1;
}
string db_file = argv[1];
// Открытие базы данных
sqlite3* db;
int rc = sqlite3_open(db_file.c_str(), &db);
if (rc != SQLITE_OK) {
cerr << "Cannot open database: " << sqlite3_errmsg(db) << endl;
sqlite3_close(db);
return 1;
}
// Запрос данных из таблицы passenger
string query = "SELECT DateTime, OriginZone, DestZone FROM passenger ORDER BY DateTime";
vector<vector<string>> rows;
rc = sqlite3_exec(db, query.c_str(), callback, &rows, nullptr);
if (rc != SQLITE_OK) {
cerr << "Cannot execute query: " << sqlite3_errmsg(db) << endl;
sqlite3_close(db);
return 1;
}
// Вывод данных в консоль
cout << "DateTime\tOriginZone\tDestZone" << endl;
for (const auto& row : rows) {
for (const auto& cell : row) {
cout << cell << '\t';
}
cout << endl;
}
// Запись данных в текстовый файл
string txt_file = db_file.substr(0, db_file.rfind('.')) + ".txt";
ofstream out(txt_file);
if (!out.is_open()) {
cerr << "Cannot open output file: " << txt_file << endl;
sqlite3_close(db);
return 1;
}
out << "DateTime\tOriginZone\tDestZone" << endl;
for (const auto& row : rows) {
for (const auto& cell : row) {
out << cell << '\t';
}
out << endl;
}
out.close();
// Закрытие базы данных
sqlite3_close(db);
Программа использует библиотеку sqlite3 для работы с базой данных. Сначала открывается база данных с помощью функции sqlite3_open(). Затем выполняется запрос к таблице passenger с помощью функции sqlite3_exec(). Результаты запроса сохраняются в векторе строк. Далее данные выводятся в консоль и записываются в текстовый файл с помощью объекта ofstream.
Пример вызова программы:
./program data.db
Здесь data.db - имя файла базы данных. Результаты запроса будут выведены в консоль и сохранены в файл data.tx
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment