Created
July 31, 2023 18:34
-
-
Save M0nteCarl0/66f7909c6472e0a96bce4e597e94f27c to your computer and use it in GitHub Desktop.
SQLlite task for fetch data from database and write to textual file
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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