Для подключения к базе данных SQLite и работы с ней в приложении на C++ с использованием библиотеки Qt, вы можете использовать класс QSqlDatabase
из QtSql модуля. Ниже представлен пример кода, который демонстрирует подключение к базе данных SQLite, создание таблицы и выполнение базовых операций.
Рассмотрим небольшой пример:
#include <QCoreApplication> #include <QSqlDatabase> #include <QDebug> #include <QSqlQuery> #include <QSqlError> // Функция для обработки сообщений void myMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg) { Q_UNUSED(context); switch (type) { case QtDebugMsg: fprintf(stderr, "Debug: %s\n", msg.toUtf8().constData()); break; case QtInfoMsg: fprintf(stderr, "Info: %s\n", msg.toUtf8().constData()); break; case QtWarningMsg: fprintf(stderr, "Warning: %s\n", msg.toUtf8().constData()); break; case QtCriticalMsg: fprintf(stderr, "Critical: %s\n", msg.toUtf8().constData()); break; case QtFatalMsg: fprintf(stderr, "Fatal: %s\n", msg.toUtf8().constData()); abort(); } } int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); qInstallMessageHandler(myMessageHandler); // Подключение к базе данных SQLite QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("mydatabase.db"); if (!db.open()) { qDebug() << "Ошибка подключения к базе данных:" << db.lastError().text(); return 1; } // Создание таблицы QSqlQuery query; query.exec("CREATE TABLE IF NOT EXISTS Employees (" " EmployeeID INT PRIMARY KEY," " FirstName VARCHAR(50)," " LastName VARCHAR(50)," " Salary DECIMAL(10, 2)" ")"); // Вставка данных query.exec("INSERT INTO Employees (EmployeeID, FirstName, LastName, Salary) " "VALUES (1, 'John', 'Doe', 50000.00)"); // Выбор данных query.exec("SELECT FirstName, LastName, Salary FROM Employees WHERE Salary > 50000"); while (query.next()) { QString firstName = query.value(0).toString(); QString lastName = query.value(1).toString(); double salary = query.value(2).toDouble(); qDebug() << "Имя:" << firstName << "Фамилия:" << lastName << "Зарплата:" << salary; } // Обновление данных query.exec("UPDATE Employees SET Salary = 55000.00 WHERE EmployeeID = 1"); // Удаление данных query.exec("DELETE FROM Employees WHERE EmployeeID = 1"); // Закрытие подключения к базе данных db.close(); return a.exec(); }
В файл pro добавляем: QT += sql
QT -= gui QT += sql CONFIG += c++11 console CONFIG -= app_bundle DEFINES += QT_DEPRECATED_WARNINGS SOURCES += \ main.cpp
Разберемся с приведенным примером более подробно.
Подключение к базе данных:
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("mydatabase.db");
Здесь создается объект QSqlDatabase для подключения к базе данных SQLite. Устанавливается тип базы данных («QSQLITE») и имя базы данных («mydatabase.db»). Если базы данных с таким именем не существует, она будет создана.
Открытие подключения к базе данных:
if (!db.open()) { qDebug() << "Ошибка подключения к базе данных:" << db.lastError().text(); return 1; }
Производится попытка открытия подключения к базе данных. Если подключение не удалось, выводится сообщение об ошибке.
Создание таблицы:
QSqlQuery query; query.exec("CREATE TABLE IF NOT EXISTS Employees (" " EmployeeID INT PRIMARY KEY," " FirstName VARCHAR(50)," " LastName VARCHAR(50)," " Salary DECIMAL(10, 2)" ")");
Запрос выполняется для создания таблицы Employees с четырьмя столбцами: EmployeeID, FirstName, LastName и Salary.
Вставка данных:
query.exec("INSERT INTO Employees (EmployeeID, FirstName, LastName, Salary) " "VALUES (1, 'John', 'Doe', 50000.00)");
Вставляется новая запись в таблицу Employees с указанными значениями.
Выбор данных:
query.exec("SELECT FirstName, LastName, Salary FROM Employees WHERE Salary > 50000"); while (query.next()) { QString firstName = query.value(0).toString(); QString lastName = query.value(1).toString(); double salary = query.value(2).toDouble(); qDebug() << "Имя:" << firstName << "Фамилия:" << lastName << "Зарплата:" << salary; }
Выполняется запрос для выбора данных о сотрудниках с зарплатой выше 50000. Результаты выводятся в консоль.
Обновление данных:
query.exec("UPDATE Employees SET Salary = 55000.00 WHERE EmployeeID = 1");
Обновляется зарплата сотрудника с EmployeeID равным 1.
Удаление данных:
query.exec("DELETE FROM Employees WHERE EmployeeID = 1");
Удаляется запись о сотруднике с EmployeeID равным 1.
Закрытие подключения к базе данных:
db.close();
После завершения работы с базой данных подключение закрывается.
Это основы работы с базой данных SQLite в приложении на C++ с использованием Qt. Каждая операция выполняется с использованием классов из модуля QtSql, что обеспечивает удобный способ взаимодействия с базой данных из приложения на Qt.