Изпълнение на 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. Ако таблицата не може да бъде създадена, на конзолата ще бъде отпечатано предупредително съобщение. Поради факта, че в таблицата ще бъде въведен повече от един ред, шаблонът за командата INSERT се дефинира в низовата променливаstrFс помощта на спецификационни знаци. Извикванията към методитеarg() на класаQStringзаместват желаните стойности с помощта на шаблон.

След това, когато базата данни е създадена и всички данни са въведени в таблицата, се изпълнява заявка SELECT, поставяйки редовете и колоните на таблицата в обектquery. Извеждането на таблични стойности към конзолата се извършва в цикъл. При първото извикване на методаnext() този обект ще сочи към първия ред в таблицата. Следващите извиквания ще преместят показалеца към следващите редове. В случай, че няма повече записи, методътnext() ще върнеfalse, което ще излезе от цикъла. За да получите резултата от заявката, извикайте методаQSqlQuery::value(), в който трябва да подадете номера на колоната. За да направим това, ще използваме методаrecord(). Този метод връща обект от класQSqlRecord, който съдържа информация, свързана със заявката SELECT. С него извикване на методаQSqlRecord::indexOf() получаваме индекса на колоната.

Методътvalue() връща стойности от типQVariant.QVariantе специален клас, чиито обекти могат да съдържат стойности от различни типове. Следователно в нашия пример получената стойност трябва да бъде преобразувана в необходимия тип с помощта на методитеQVariant::toInt() иQVariant::toString().