hab heute ein bisschen darüber nachgedacht, wie man am besten mit der QSqlDatabase Klasse die Fehlerbehandlung im Falle einer fehlerhaften SQL behandelt.
Hab mich nun dazu entschieden, eine eigene Klasse zu verwenden, welche die QSqlDatabase Klasse verwaltet, und welche ein Signal zur Verfügung stellt, welches geschmissen wird, sobald ein fehlerhaften SQL Statement, Verbindungsfehler etc. auftritt:
Code: Alles auswählen
#ifndef DATABASE_H
#define DATABASE_H
#include <QObject>
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
class Database : public QObject
{
Q_OBJECT
public:
// Fehler- Meldungen:
enum ErrorTypes {
ERROR_SQL_STATEMENT, // Wenn ein SQL fehlgeschlagen ist.
ERROR_CONNECT, // Wenn beim verbinden zur DB ein Fehler auftritt.
ERROR_TRANSACTION, // Wenn Transaktion fehlgeschlagen ist.
ERROR_UNKNOWN // Genaue Fehlerursache ist nicht bekannt.
};
private:
// Verbindung zur Datenbank:
QSqlDatabase _dbConnection;
public:
explicit Database(QSqlDatabase &dbConnection, QObject *parent = 0);
// Verbindungs- Daten zur Datenbank setzen:
void setHostname(const QString &hostname);
void setUsername(const QString &username);
void setPassword(const QString &password);
void setDatabase(const QString &database);
// Zur Datenbank verbinden:
bool connect();
bool connect(const QString &hostname, const QString &username, const QString &password, const QString &database);
// Führt eine SQL aus:
QSqlQuery query(const QString sql, const int line, const char *file, const bool throwError = true);
// Fehlerbehandlung:
QString lastErrorText();
signals:
// Signal, wenn ein Fehler aufgetreten ist:
void error(const int line, const char *file, ErrorTypes error, const QString errorMessage, const QString sql);
public slots:
};
#endif // DATABASE_H