Ответ
Да, в C++ проектах я часто писал SQL-запросы для работы с реляционными базами данных. Основной опыт связан с использованием нативных C/C++ API, таких как SQLite3, MySQL Connector/C++ и ODBC.
Пример работы с SQLite3 в C++:
#include <sqlite3.h>
#include <iostream>
#include <string>
int main() {
sqlite3* db;
sqlite3_open("test.db", &db);
const char* sql = "SELECT id, name FROM users WHERE age > ?;";
sqlite3_stmt* stmt;
if (sqlite3_prepare_v2(db, sql, -1, &stmt, nullptr) == SQLITE_OK) {
sqlite3_bind_int(stmt, 1, 18); // Привязка параметра
while (sqlite3_step(stmt) == SQLITE_ROW) {
int id = sqlite3_column_int(stmt, 0);
const unsigned char* name = sqlite3_column_text(stmt, 1);
std::cout << "ID: " << id << ", Name: " << name << std::endl;
}
sqlite3_finalize(stmt);
} else {
std::cerr << "Failed to prepare statement: " << sqlite3_errmsg(db) << std::endl;
}
sqlite3_close(db);
return 0;
}
С чем работал:
- Сложные запросы:
JOIN(INNER, LEFT),GROUP BYс агрегатными функциями, подзапросы. - Оптимизация: Использование индексов, анализ планов выполнения (
EXPLAIN QUERY PLANв SQLite). - Безопасность: Всегда использовал параметризованные запросы (как в примере с
?) для предотвращения SQL-инъекций. - Интеграция: Для сложной бизнес-логики иногда использовал ORM вроде ODB или выносил логику в хранимые процедуры на стороне СУБД (например, в PostgreSQL).
Ответ 18+ 🔞
Да ты посмотри, какие запросы я на C++ писал, ёпта! Прямо овердохуища работы было с базами данных. В основном, конечно, через нативные API — SQLite3 там, MySQL Connector/C++ или вот этот старый добрый ODBC, который, как мартышлюшка, везде пролезет.
Вот, смотри, как с SQLite3 обычно работал:
#include <sqlite3.h>
#include <iostream>
#include <string>
int main() {
sqlite3* db;
sqlite3_open("test.db", &db);
const char* sql = "SELECT id, name FROM users WHERE age > ?;";
sqlite3_stmt* stmt;
if (sqlite3_prepare_v2(db, sql, -1, &stmt, nullptr) == SQLITE_OK) {
sqlite3_bind_int(stmt, 1, 18); // Привязка параметра
while (sqlite3_step(stmt) == SQLITE_ROW) {
int id = sqlite3_column_int(stmt, 0);
const unsigned char* name = sqlite3_column_text(stmt, 1);
std::cout << "ID: " << id << ", Name: " << name << std::endl;
}
sqlite3_finalize(stmt);
} else {
std::cerr << "Failed to prepare statement: " << sqlite3_errmsg(db) << std::endl;
}
sqlite3_close(db);
return 0;
}
А вообще, с чем только не сталкивался, бля:
- Запросы сложные: Все эти
JOIN'ы,GROUP BYс кучей функций — обычное дело. Иногда такой запрос напишешь, что сам от себя охуеваешь, как оно работает. - Оптимизация: Тут без мозгов никак. Индексы настраивал, планы выполнения смотрел, чтобы всё летало, а не ползало, как черепаха.
- Безопасность, ёпта! Это святое. Только параметризованные запросы, как в примере. Доверия ебать ноль любым пользовательским данным, поэтому SQL-инъекции у меня просто не прокатывали.
- Интеграция: Для особо хитрожопой логики иногда брал ORM вроде ODB, а то и вовсе выносил всё в хранимые процедуры на стороне базы, особенно с PostgreSQL. Главное — чтобы работало, и чтобы потом не пришлось всё это ебать-колотить переделывать.
Видео-ответы
▶
▶
▶
▶
▶