Qt, Базы данных

Способы выполнения запросов к базе данных в Qt

В записи Подключение к базе данных в Qt я описала, каким образом в Qt можно создать подключение к базе. Теперь рассмотрим такую базовую операцию, как запрос на выборку данных. Сначала необходимо подключить следующие классы:

#include <QSqlQuery>
#include <QSqlError> //для вывода ошибок запросов
#include <QDebug> //для вывода отладочной информации

Пусть в базе данных имеется таблица следующего вида:

CREATE TABLE tableName
(
  id integer NOT NULL,
  fieldName character varying(100) NOT NULL,
  CONSTRAINT entities_pkey PRIMARY KEY (id)
)
Таблица в PostgreSQL

В программе необходимо произвести выборку значений из этой таблицы по какому-то критерию: fieldName должно содержать в себе подстроку «имя»:

Способ 1: QString

QSqlQuery query;
if (!query.exec(QString("select * from tableName "
						"where fieldName like '%1' "
					   "order by id").arg("%имя%")))
	qDebug() << query.lastError().text();
Через строку с параметрами

Задаем строку запроса, вместо изменяющихся величин задаем параметры через «%».

Способ 2: bindValue

QSqlQuery query;
query.prepare("select * from tableName "
			"where fieldName like :param "
			"order by id");
query.bindValue(":param", QVariant("%имя%"));
if (!query.exec())
	qDebug() << query.lastError().text();
Через bindValue

Преобразование QVariant() передаст в запрос параметр нужного типа.

Способ 3. addBindValue

QSqlQuery query;
query.prepare("select * from tableName "
			"where fieldName like ? "
			"order by id);
query.addBindValue(QVariant("%имя%"));
if (!query.exec())
	qDebug() << query.lastError().text();
Через addBindValue

Здесь явно не указываются параметры. addBindValue последовательно по тексту запроса подставляет указанные значения параметров.

 

Оставьте своё мнение...

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.