Поиск публикаций
Муниципальные услуги

Получите услугу онлайн

Перейти

Работа с Базой данных

 Открытие соединения

бд.открытьСинх(драйвер, имя, параметры)

Устанавливает синхронное соединение с базой данных. Выполняется немедленно, блокируя выполнение скрипта до успешного подключения или ошибки.

ПараметрТипОписание
драйверстрокаИмя драйвера (например, "QSQLITE", "QMYSQL", "QPSQL")
имястрокаИмя базы данных (для SQLite — путь к файлу, или ":memory:")
параметрыобъектДополнительные параметры подключения (зависят от драйвера):
host (строка) — хост,
port (число) — порт,
user (строка) — пользователь,
password (строка) — пароль,
— и другие (подробнее в документации Qt SQL).
Возвращает: ничего. В случае ошибки выбрасывается исключение.
Важно: Все методы модуля «бд» — синхронные. Они блокируют выполнение до завершения операции. Для асинхронной работы используйте волокна (см. документацию по модулю «фс»).
Пример из теста:
бд.открытьСинх("QSQLITE", "test_mem", { databaseName: ":memory:" });

 Выполнение запроса (без результата)

бд.выполнитьСинх(sql, параметры)

Выполняет SQL-запрос, не возвращающий набор данных (например, INSERT, UPDATE, DELETE, CREATE TABLE).

ПараметрТипОписание
sqlстрокаSQL-запрос (может содержать плейсхолдеры ? или :name)
параметрымассивЗначения для плейсхолдеров (позиционные или именованные)
Возвращает: число — количество затронутых строк (для INSERT/UPDATE/DELETE), или 0 для DDL-запросов.
Пример из теста:
бд.выполнитьСинх("CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)", []);
бд.выполнитьСинх("INSERT INTO users (name) VALUES (?)", ['Иван']);

 Выполнение запроса (с результатом)

бд.запросСинх(sql, параметры)

Выполняет SQL-запрос, возвращающий набор данных (например, SELECT). Возвращает массив записей.

ПараметрТипОписание
sqlстрокаSQL-запрос (может содержать плейсхолдеры)
параметрымассивЗначения для плейсхолдеров
Возвращает: массив объектов. Каждый объект соответствует одной строке результата, свойства объекта — имена колонок (в том регистре, в котором они возвращены).
Пример из теста:
$данные = бд.запросСинх("SELECT * FROM users", []);
для каждого ($запись из $данные) {
    вывод($запись.name);
}

 Закрытие соединения

бд.закрытьСинх()

Закрывает текущее соединение с базой данных. Все несохранённые изменения фиксируются (автоматический коммит).

Возвращает: ничего. В случае ошибки выбрасывается исключение.
Пример:
бд.закрытьСинх();

 Объект результата запроса

Результат, возвращаемый запросСинх, представляет собой массив (список) записей. Каждая запись — это объект, поля которого соответствуют столбцам результата.

  • Доступ к полям: $запись.имя_колонки
  • Длина массива: массивы.длина($результат) или $результат.длина (в зависимости от реализации). В тесте используется $данные.длина, что предполагает свойство длина у массива.
  • Если запрос не вернул строк, возвращается пустой массив (длина 0).
Примечание: Имена свойств регистрозависимы. Обычно они возвращаются в том виде, в каком заданы в SQL (например, name, а не NAME).

 Поддерживаемые драйверы

Модуль «бд» основан на фреймворке Qt SQL, поэтому поддерживаются все драйверы, доступные в вашей сборке Qt. Наиболее часто используемые:

  • QSQLITE — SQLite (встроенная БД, файл или :memory:)
  • QMYSQL / QMARIADB — MySQL / MariaDB
  • QPSQL — PostgreSQL
  • QODBC — ODBC (для подключения к MS SQL Server и другим)
  • QOCI — Oracle

Для использования драйвера, отличного от SQLite, убедитесь, что соответствующие плагины Qt установлены и доступны в вашей системе.

 Полный пример

Ниже приведён скрипт, демонстрирующий все основные операции модуля «бд» (на основе тестового скрипта).

// ============================================================
// Пример работы с базой данных (SQLite в памяти)
// ============================================================

попытка {
    // 1. Открыть соединение
    бд.открытьСинх("QSQLITE", "test_mem", { databaseName: ":memory:" });
    вывод("Соединение открыто\n");

    // 2. Создать таблицу
    бд.выполнитьСинх("CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)", []);
    вывод("Таблица создана\n");

    // 3. Вставить данные
    $вставка = бд.выполнитьСинх("INSERT INTO users (name) VALUES (?)", ['Иван']);
    вывод("Добавлено строк: " + строка($вставка) + "\n");

    // 4. Выполнить запрос с результатом
    $данные = бд.запросСинх("SELECT * FROM users", []);
    вывод("Найдено записей: " + строка($данные.длина) + "\n");
    для каждого ($строка из $данные) {
        вывод("  id=" + строка($строка.id) + ", name=" + $строка.name + "\n");
    }

    // 5. Закрыть соединение
    бд.закрытьСинх();
    вывод("Соединение закрыто\n");
} ловушка ($ошибка) {
    вывод("Ошибка: " + строка($ошибка) + "\n");
}