Виконання команд SQL Qt, Програмування Qt

Зміст

  • Програмування баз даних за допомогою Qt
  • Використання QtSql у бібліотеці Qt
  • З'єднання з базою даних за допомогою Qt
  • Виконання команд SQL Qt
  • Класи SQL-моделей для інтерв'ю

Для виконання команд SQL після встановлення з'єднання можна використовувати класQSqlQuery. Запити (команди) оформляються у вигляді звичайного рядка, який передається в конструктор або методQSqlQuery::exec(). У випадку конструктора, запуск команди буде здійснюватися автоматично при створенні об'єкта.

КласQSqlQueryнадає можливість навігації. Наприклад, після виконання запиту SELECT можна переміщатися за зібраними даними за допомогою методівnext(),previous(),first(),last() іseek(). За допомогою методуnext() ми переміщуємося на наступний рядок даних, а виклик методуprevious() переміщує нас на попередній рядок даних. За допомогою методівfirst() іlast() можна встановити перший і останній рядок даних відповідно. Методseek() встановлює рядок даних за вказаним цілим індексом в його параметрі. Кількість рядків даних можна отримати викликом методуsize().

Додаткові складності виникають із запитом INSERT. Справа в тому, що в запит необхідно впроваджувати дані. Для цього можна скористатися двома методами:prepare() іbindValue(). У методіprepare() ми задаємо шаблон, дані в який підставляються методамиbindValue(). Наприклад:

Також можна скористатися відомим з ODBC варіантом використання безіменних параметрів:

Як третій варіант — можнаскористатися класомQString, зокрема методомQString::arg(), за допомогою якого можна зробити підстановку значень даних.

Програма, наведена вище, показує виконання команд SQL. Проводиться створення бази, запис даних та його опитування. В результаті на консоль буде виведено такі дані:

У разі вдалого з'єднання з базою даних за допомогою createConnection() створюється рядок, що містить команду SQL для створення таблиці. Цей рядок передається в методexec() об'єкта класуQSqlQuery. Якщо створити таблицю не вдається, то консоль буде виведено попереджувальне повідомлення. Зважаючи на те, що до таблиці буде внесено не один рядок, у рядковій зміннійstrFза допомогою символів специфікації визначається шаблон для команди INSERT. Виклики методівarg() класуQStringпідставляють потрібні значення використовуючи шаблон.

Потім, коли база даних створена і всі дані були внесені в таблицю, виконується запит SELECT, що містить рядки та стовпці таблиці в об'єктquery. Виведення значень таблиці на консоль проводиться у циклі. При першому виклику методуnext() цей об'єкт буде вказувати на перший рядок таблиці. Наступні дзвінки призведуть до переміщення вказівника на наступні рядки. Якщо записів більше немає, методnext() повернеfalse, що призведе до виходу з циклу. Для отримання результату запиту слід викликати методQSqlQuery::value(), у якому необхідно передати номер стовпця. І тому ми скористаємося методомrecord(). Цей метод повертає об'єкт класуQSqlRecord, який містить інформацію, що стосується запиту SELECT . З його допомогою, викликом методуQSqlRecord::indexOf(), ми отримуємо індекс стовпця.

Методvalue() повертає значення типуQVariant.QVariant- це спеціальний клас, об'єкти якого можуть містити в собі значення різних типів. Тому, у нашому прикладі, отримане значення потрібно перетворити до необхідного типу, скориставшись методамиQVariant::toInt() таQVariant::toString().