Тема: База даних SQLite і C++.
Привіт всім. Підкажіть, будь-ласка, як підключити базу даних SQLite до консольного додатку в C++.
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → C++ → База даних SQLite і C++.
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися
Привіт всім. Підкажіть, будь-ласка, як підключити базу даних SQLite до консольного додатку в C++.
Microsoft Visual Studio 2019. Операційна система Windows 10.
Підключити .h та .с файли sqlite після чого створюєте свою функцію та пишете туди щось на кшалт:
int WriterIfcProperty::writeDb()
{
const char* CREATE_AUXILIARY_CONTAINER_INFO = "DROP TABLE IF EXISTS AuxiliaryContainerInfo; " \
"CREATE TABLE AuxiliaryContainerInfo (" \
"container_id INTEGER PRIMARY KEY," \
"element_id INTEGER," \
"metadata_container_id INTEGER," \
/* " FOREIGN KEY(metadata_container_id) REFERENCES metadata_container(id) " \ */
"); ";
boost::filesystem::path path = "D:/tmp/";
path.append("passthrough.db");
sqlite3 *db;
int rc;
char *zErrMsg = 0;
rc = sqlite3_open_v2(path.string().c_str(), &db, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, 0);
if (rc || NULL == db)
{
Data::enterLog(LOG_ERROR, std::string("Unable to open ") + path.string() + ": " + sqlite3_errmsg(db));
sqlite3_close(db);
return 0;
}
// Options for improved write performance. We're always writing a new DB that's not useful in the event
// of a pipe crash, so we don't have a need for writing to disk as we go.
// Well-documented at: https://www.sqlite.org/pragma.html
sqlite3_exec(db, "PRAGMA journal_mode = OFF", nullptr, nullptr, &zErrMsg);
sqlite3_exec(db, "PRAGMA synchronous = OFF", nullptr, nullptr, &zErrMsg);
sqlite3_exec(db, "PRAGMA locking_mode = EXCLUSIVE", nullptr, nullptr, &zErrMsg);
const char* startTransaction = "BEGIN TRANSACTION;";
const char* endTransaction = "END TRANSACTION;";
rc = sqlite3_exec(db, startTransaction, callback, 0, &zErrMsg);
if (rc)
{
Data::enterLog(LOG_ERROR, std::string("Unable to start transaction on ") + path.string() + ": " + sqlite3_errmsg(db));
sqlite3_close(db);
return rc;
}
rc = sqlite3_exec(db,CREATE_AUXILIARY_CONTAINER_INFO, callback, nullptr, &zErrMsg);
if (rc != SQLITE_OK)
{
Data::enterLog(LOG_ERROR, std::string("Unable to create parameter group table ") + path.string() + ": " + sqlite3_errmsg(db));
sqlite3_close(db);
return rc;
}
const char* insertStmt = "insert into AuxiliaryContainerInfo values(?,?,?);";
sqlite3_stmt* meshStmt = 0;
const char* pzTail = 0;
const std::string name = "My name";
int index = 0;
int nsize = (int)name.size();
rc = sqlite3_prepare_v2(db, insertStmt, (int)strlen(insertStmt), &meshStmt, &pzTail);
sqlite3_bind_int(meshStmt, 1, index);
sqlite3_bind_text(meshStmt, 2, name.c_str(), nsize, 0);
sqlite3_bind_int(meshStmt, 3, index);
rc = sqlite3_step(meshStmt);
if (rc == SQLITE_DONE)
{
sqlite3_reset(meshStmt);
rc = sqlite3_finalize(meshStmt);
if (rc != SQLITE_OK)
{
logErrorForSQLStatement(db, "writeGeometryBinDb sqlite3_finalize", NULL, rc);
}
}
rc = sqlite3_exec(db, endTransaction, callback, 0, &zErrMsg);
if (rc != SQLITE_OK)
{
Data::enterLog(LOG_ERROR, std::string("Unable to end transaction on ") + path.string() + ": " + sqlite3_errmsg(db));
}
rc = sqlite3_close_v2(db);
if (rc != SQLITE_OK)
{
Data::enterLog(LOG_ERROR, std::string("Unable to close ") + path.string() + ": " + sqlite3_errmsg(db));
}
return rc;
}
Приклад створює БД якщо вона не існує, створює таблицю з іменем AuxiliaryContainerInfo починає транзакцію, записує рядок з трьох параметрів та завершує транзакцію.
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися