Для подключения к базе данных 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.
