SQL и Qt 65

SQL и Qt

QSqlDatabase: подключение к SQLite, MySQL и PostgreSQL из Qt

Введение Модуль Qt SQL предоставляет единый высокоуровневый интерфейс для работы с разными СУБД — SQLite, MySQL, PostgreSQL и другими — через систему драйверов. Это позволяет писать код, который…

SQL и Qt

QSqlQuery и подготовленные запросы: защита от SQL-инъекций в Qt

Введение Формирование SQL-запроса через конкатенацию строк с пользовательским вводом — прямой путь к SQL-инъекции, одной из самых серьёзных и распространённых уязвимостей веб- и десктоп-приложений, работающих с базами данных.…

SQL и Qt

QSqlTableModel и QSqlRelationalTableModel: связка БД с UI без ручного SQL

Введение Для типичной задачи отображения и редактирования таблицы базы данных в табличном виджете Qt предоставляет QSqlTableModel, который автоматически генерирует SQL-запросы для чтения, обновления, вставки и удаления строк, избавляя…

SQL и Qt

Миграции схемы базы данных в Qt-приложении: версионирование и накатывание изменений

Введение По мере развития приложения схема базы данных меняется — добавляются таблицы, столбцы, индексы. Если изменения схемы применяются вручную и бесконтрольно, разные установки приложения у разных пользователей (или…

SQL и Qt

Транзакции в QSqlDatabase: откат изменений при ошибках

Введение Транзакция — группа операций с базой данных, которая должна быть выполнена целиком (commit) или не выполнена вовсе (rollback), без промежуточных, частично применённых состояний. Это критично для операций,…

SQL и Qt

Зачем ORM в Qt-проекте: проблемы прямого SQL и что решает абстракция

Введение Прямая работа с QSqlQuery, разобранная в основном цикле статей про SQL, прекрасно подходит для небольших приложений с несколькими запросами — но по мере роста проекта SQL-строки начинают…

SQL и Qt

Маппинг QSqlRecord на C++ структуры автоматически

Введение В предыдущих статьях метод mapRowToUser() вручную перечислял каждое поле строки результата запроса — для структуры с десятком полей это многословно и подвержено ошибкам (легко перепутать порядок или…

SQL и Qt

Unit of Work и управление транзакциями в слое данных

Введение Когда бизнес-операция затрагивает несколько сущностей одновременно (например, «оформить заказ» должно одновременно создать запись заказа, уменьшить остаток товара на складе и записать движение по счёту), вызов нескольких независимых…

SQL и Qt

Связи «один-ко-многим» и «многие-ко-многим» без QSqlRelationalTableModel

Введение QSqlRelationalTableModel (основной цикл, статья 144) хорошо подходит для простых связей, отображаемых прямо в QTableView, но для произвольной бизнес-логики, не привязанной к конкретному виджету, нужен более гибкий способ…