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

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

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

[pastacode lang=»cpp» manual=»%23include%20%3CQSqlQuery%3E%0A%23include%20%3CQSqlError%3E%20%2F%2F%D0%B4%D0%BB%D1%8F%20%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D0%B0%20%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA%20%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2%0A%23include%20%3CQDebug%3E%20%2F%2F%D0%B4%D0%BB%D1%8F%20%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D0%B0%20%D0%BE%D1%82%D0%BB%D0%B0%D0%B4%D0%BE%D1%87%D0%BD%D0%BE%D0%B9%20%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D0%B8″ message=»» highlight=»» provider=»manual»/]

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

[pastacode lang=»sql» manual=»CREATE%20TABLE%20tableName%0A(%0A%20%20id%20integer%20NOT%20NULL%2C%0A%20%20fieldName%20character%20varying(100)%20NOT%20NULL%2C%0A%20%20CONSTRAINT%20entities_pkey%20PRIMARY%20KEY%20(id)%0A)» message=»Таблица в PostgreSQL» highlight=»» provider=»manual»/]

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

Способ 1: QString

[pastacode lang=»cpp» manual=»QSqlQuery%20query%3B%0Aif%20(!query.exec(QString(%22select%20*%20from%20tableName%20%22%0A%09%09%09%09%09%09%22where%20fieldName%20like%20’%251’%20%22%0A%09%09%09%09%09%20%20%20%22order%20by%20id%22).arg(%22%25%D0%B8%D0%BC%D1%8F%25%22)))%0A%09qDebug()%20%3C%3C%20query.lastError().text()%3B» message=»Через строку с параметрами» highlight=»» provider=»manual»/]

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

Способ 2: bindValue

[pastacode lang=»cpp» manual=»QSqlQuery%20query%3B%0Aquery.prepare(%22select%20*%20from%20tableName%20%22%0A%09%09%09%22where%20fieldName%20like%20%3Aparam%20%22%0A%09%09%09%22order%20by%20id%22)%3B%0Aquery.bindValue(%22%3Aparam%22%2C%20QVariant(%22%25%D0%B8%D0%BC%D1%8F%25%22))%3B%0Aif%20(!query.exec())%0A%09qDebug()%20%3C%3C%20query.lastError().text()%3B» message=»Через bindValue» highlight=»» provider=»manual»/]

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

Способ 3. addBindValue

[pastacode lang=»cpp» manual=»QSqlQuery%20query%3B%0Aquery.prepare(%22select%20*%20from%20tableName%20%22%0A%09%09%09%22where%20fieldName%20like%20%3F%20%22%0A%09%09%09%22order%20by%20id)%3B%0Aquery.addBindValue(QVariant(%22%25%D0%B8%D0%BC%D1%8F%25%22))%3B%0Aif%20(!query.exec())%0A%09qDebug()%20%3C%3C%20query.lastError().text()%3B» message=»Через addBindValue» highlight=»» provider=»manual»/]

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

 

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

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