Home / Programmazione / C - C++ / Connessione ODBC in Qt
Mattepuffo

Connessione ODBC in Qt

Connessione ODBC in Qt

Avendo un database Oracle, volevo connettere una mia applicazione in Qt a questo db per giocarci un pò.

Ho scoperto con molto piacere che è possibile usare ODBC con il driver QODBC, che è già incluso.

Inoltre, il framework supporta diversi db; potete vedere tutto alla pagina dedicata.

Cerchiamo di vedere le varie operazioni da compiere.

Prima di tutto dovete aggiungere il supporto sql dal file di configurazione (il file .pro):

QT       += core gui sql

A questo punto creiamo una classe apposita per fare dei test.

Questo il file di intestazione:

#ifndef DATABASE_H
#define DATABASE_H

#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQuery>

class Database
{

public:
    static Database* getInstance();
    void execQuery(QString strQuery);

protected:
    Database();

private:
    static Database* instance;
    QSqlDatabase db;
    bool dbOpened;
};

#endif // DATABASE_H

Qui aggiungiamo i due import per le funzioni db; le funzioni sono indipendenti dal db in uso, in quanto ci penserà il driver a fare il lavoro sporco.

Questo il file di implementazione:

#include "database.h"

Database* Database::instance = 0;

Database* Database::getInstance()
{
    if (instance == 0)
    {
        instance = new Database();
    }
    return instance;
}

Database::Database()
{
    db = QSqlDatabase::addDatabase("QODBC3");
    db.setDatabaseName("");
    db.setUserName("");
    db.setPassword("");
    db.setHostName("");
    db.setPort(1521);
    dbOpened = db.open();
}

void Database::execQuery(QString strQuery)
{
    if (dbOpened)
    {
        QSqlQuery query(strQuery);
        while (query.next()) {
            qDebug() << query.value(0).toString();
        }
    }
    else
    {
        qDebug() << "Db non apeto!";
    }
}

(Il tutto condito sa un pò di Singleton).

Nel costruttore creiamo la connessione; dovete solo mettere i parametri del vostro database.

Nella funzione execQuery controlliamo che la connessione sia attiva, e in caso eseguiamo la query passata come parametro.

La query sarà sempre nel classico formato SQL:

SELECT * FROM tbl;

Tanto per fare un esempio veloce.

Enjoy!