QT biblioteka (QT Creator + QT SDK) vis plačiau naudojamas programavimo įrankis pasižymintis greitaveika, efektyvumu ir paprastumu bei leidžiantis kurti programas Linux, Mac, Windows, Symbian OS ir kitoms platformoms. Kuriant taikomąsias ir verslo sistemas dažnai prireikia prisijungti prie duomenų bazės. QT SDK bibliotekoje integruotos priemonės daugeliui populiarių duomenų bazių, tokių, kaip PostgreSQL, SqlLite, MySQL ir kt. Tam QT naudoja specialias bibliotekas dar vadinamas įskiepiais (angl. plugin). Standartiniame QT SDK pakete SqlLite, PostgreSQL duomenų bazėms šias bibliotekas radau automatiškai sukurtas tačiau MySQL duomenų bazei gali tekti diegti pačiam. Tai gana paprasta atlikti 5 žingsniais:

Pastaba: Diegimo procesas aprašytas Linux operacinei sistemai, tačiau panašūs principai taikomi ir kitoms OS.

1. Įsidiegti ‘mysql-server’ ir ‘libmysqlclient15-dev’ paketus (jei dar neturite) naudojant Synaptic package manager arba per terminalą:

sudo apt-get install mysql-server libmysqlclient15-dev

2. Įtraukti SQL bibliotekas savo QT projekto faile „*.pro“ įrašant įrašą:

QT += sql


3. Patikrinti ar QT yra įdiegta MySQL biblioteka ‘libqsqlmysql.so’.  Jis turi buti kataloge: <QT-KATALOGAS>/qt/plugins/sqldrivers/libqsqlmysql.so Jei tokios bibliotekos nėra tada ją reikia susikompiliuoti ir įsidiegti. Tai labai parasta:

3.1 Nueiname į katalogą:

cd <QT-KATALOGAS>/qt/src/plugins/sqldrivers/mysql

3.2 Sukonfiguruojame kompiliaciją paleisdami ‘qmake’ tokiame formate:

<QT-KATALOGAS>/qt/bin/qmake "INCLUDEPATH+=<mysql.h include path>" "LIBS+=-L<libmysqlclient.so path> -lmysqlclient" mysql.pro

Kur:

- turi rodyti kelią į ‘mysql.h’ failą, pavyzdžiui ‘/usr/include/mysql’
- turi rodyti kelią į libmysqlclient.so, pavyzdžiui ‘/usr/lib’

pasitikrinti kur yra ‘mysql.h’ ir ‘libmysqlclient.so’ galima su komanda ‘locate’:

locate mysql.h
locate libmysqlclient.so

Pilnas pavyzdys:

<QT-KATALOGAS>/qt/bin/qmake "INCLUDEPATH+=/usr/include/mysql" "LIBS+=-L/usr/lib -lmysqlclient" mysql.pro

3.3 Kompiliuojame su komanda ‘make’:

make

3.4 Diegiame su komanda ‘make install’:

make install

Pasitikrinus turėtume rasti biblioteką

ls <QT-KATALOGAS>/qt/plugins/sqldrivers/libqsqlmysql.so

4. Laikas įsitikinti, ar viskas veikia. Tam MySQL serveryje susikuriame duomenų bazę su keliomis lentelėmis. Tai galime padaryti įsidiegę tokias programas kaip MySQL Workbench arba per terminalą:

- Prisijungiame ir įvedame slaptažodį:

mysql -u root -p

- Kuriame duomenų bazę:

mysql> CREATE DATABASE IF NOT EXISTS qttest;
mysql> USE qttest;

- Kuriame lentelę:

mysql> CREATE TABLE adresu_knygele(id INT NOT NULL, vardas_pavarde VARCHAR(50) NULL, adresas VARCHAR(30) NULL);

- Sukuriame keletą įrašų:

mysql> INSERT INTO adresu_knygele(id, vardas_pavarde, adresas) VALUES(1, 'Vardaitis Pavardaitis', 'Begiu g. 12, Rugpieniu kaimas');
mysql> INSERT INTO adresu_knygele(id, vardas_pavarde, adresas) VALUES(2, 'Vardaite Pavardaite', 'Begiu g. 18, Rugpieniu km.');

5. Belieka išbandyti kaip veikia programos kodas iš QT:

#include <QSqlDatabase>
#include <QSqlQuery>
#include <QTextStream>

// . . .

void MainWindow::sqlTest() {
    QTextStream ts(stdout);

    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("localhost");
    db.setUserName("root");
    db.setPassword("password123");
    db.setDatabaseName("qttest");

    bool ok = db.open();

    if (ok) {
        QSqlQuery qs("SELECT id, vardas_pavarde, adresas FROM adresu_knygele;");

            while (qs.next()) {
                     int id = qs.value(0).toInt();
                     QString name = qs.value(1).toString();
                     QString address = qs.value(2).toString();
                     ts << "ID: " << id << " NAME: " << name << " ADRESS: " << address << "\n";
            }
        db.close();
    }

}

Skanaus :)