-
Автор темы
- #1
при попытке достать из бд данные пишет Ошибка при выполнении запроса: no such table: data, хотя создается и добавляется все вроде правильно
Код:
void createDatabase(const char* dbName) {
sqlite3* db;
int result = sqlite3_open(dbName, &db);
if (result != SQLITE_OK) {
std::cerr << "Ошибка при создании базы данных: " << sqlite3_errmsg(db) << std::endl;
sqlite3_close(db);
return;
}
std::string query = "CREATE TABLE IF NOT EXISTS data (key TEXT PRIMARY KEY, data TEXT)";
result = sqlite3_exec(db, query.c_str(), nullptr, nullptr, nullptr);
if (result != SQLITE_OK) {
std::cerr << "Ошибка при создании таблицы: " << sqlite3_errmsg(db) << std::endl;
}
else {
std::cout << "Таблица успешно создана." << std::endl;
}
sqlite3_close(db);
}
void addData(const char* dbName, const char* key, const char* data) {
sqlite3* db;
int result = sqlite3_open(dbName, &db);
if (result != SQLITE_OK) {
std::cerr << "Ошибка при открытии базы данных: " << sqlite3_errmsg(db) << std::endl;
sqlite3_close(db);
return;
}
std::string query = "INSERT INTO data (key, data) VALUES ('" + std::string(key) + "', '" + std::string(data) + "')";
result = sqlite3_exec(db, query.c_str(), nullptr, nullptr, nullptr);
if (result != SQLITE_OK) {
std::cerr << "Ошибка при добавлении данных: " << sqlite3_errmsg(db) << std::endl;
}
else {
std::cout << "Данные успешно добавлены." << std::endl;
}
sqlite3_close(db);
}
const char* getData(const char* dbName, const char* key) {
sqlite3* db;
int result = sqlite3_open(dbName, &db);
if (result != SQLITE_OK) {
std::cerr << "Ошибка при открытии базы данных: " << sqlite3_errmsg(db) << std::endl;
sqlite3_close(db);
return nullptr;
}
std::string query = "SELECT data FROM data WHERE key = '" + std::string(key) + "'";
sqlite3_stmt* stmt;
result = sqlite3_prepare_v2(db, query.c_str(), -1, &stmt, nullptr);
if (result != SQLITE_OK) {
std::cerr << "Ошибка при выполнении запроса: " << sqlite3_errmsg(db) << std::endl;
sqlite3_finalize(stmt);
sqlite3_close(db);
return nullptr;
}
const char* data = nullptr;
if (sqlite3_step(stmt) == SQLITE_ROW) {
data = reinterpret_cast<const char*>(sqlite3_column_text(stmt, 0));
}
sqlite3_finalize(stmt);
sqlite3_close(db);
return data;
}