///////////////////////////////////////////////////////// POSTGRESDRIVER.H
class PostgresDriver
: public QObject{
public:
~PostgresDriver();
QList<QSqlRecord> executeQuery
(QString sql
);
private:
};
///////////////////////////////////////////////////////// POSTGRESDRIVER.CPP
#include "PostgresDriver.h"
{
this->connection_name = connection_name;
this
->database
= QSqlDatabase::addDatabase("QPSQL" , this
->connection_name
);
// HERE IS WHERE IT BREAKS IF DRIVER IS CREATED NOT IN THE MAIN THREAD this->database.setHostName( url );
this->database.setPort( port );
this->database.setDatabaseName( db_name );
this->database.setUserName( db_user );
this->database.setPassword( db_pass );
while( !this->database.open() ){
this->thread()->sleep( 2 ); // Wait 2 seconds
qWarning() << "[PostgresDriver::connectDB] Unable to connect to DB : " << this->database.hostName() << this->database.port() << this->database.databaseName() << " waiting..." << endl;
}
}
PostgresDriver::~PostgresDriver(){
this->database.close();
this->database.removeDatabase( this->connection_name );
}
QList<QSqlRecord> PostgresDriver
::executeQuery( QString sql
){
QList<QSqlRecord> list;
if( this->database.isOpen() ){
QSqlQuery query
( this
->database.
database( this
->connection_name
) );
query.exec( sql );
qWarning() << error.text() << endl << sql << endl;
}
while( query.next() ){
list.append(query.record());
}
} else {
qWarning() << "[PostgresDriver::executeQuery] Could not execute query because database is closed." << endl;
}
return list;
}
///////////////////////////////////////////////////////// POSTGRESDRIVER.H
class PostgresDriver : public QObject
{
public:
PostgresDriver(QString url, int port, QString db_name, QString db_user, QString db_pass, QString connection_name = "shared_connection");
~PostgresDriver();
QList<QSqlRecord> executeQuery(QString sql);
private:
QSqlDatabase database;
QString connection_name;
};
///////////////////////////////////////////////////////// POSTGRESDRIVER.CPP
#include "PostgresDriver.h"
PostgresDriver::PostgresDriver(QString url, int port, QString db_name, QString db_user, QString db_pass, QString connection_name) : QObject()
{
this->connection_name = connection_name;
this->database = QSqlDatabase::addDatabase("QPSQL" , this->connection_name); // HERE IS WHERE IT BREAKS IF DRIVER IS CREATED NOT IN THE MAIN THREAD
this->database.setHostName( url );
this->database.setPort( port );
this->database.setDatabaseName( db_name );
this->database.setUserName( db_user );
this->database.setPassword( db_pass );
while( !this->database.open() ){
this->thread()->sleep( 2 ); // Wait 2 seconds
qWarning() << "[PostgresDriver::connectDB] Unable to connect to DB : " << this->database.hostName() << this->database.port() << this->database.databaseName() << " waiting..." << endl;
}
}
PostgresDriver::~PostgresDriver(){
this->database.close();
this->database.removeDatabase( this->connection_name );
}
QList<QSqlRecord> PostgresDriver::executeQuery( QString sql ){
QList<QSqlRecord> list;
if( this->database.isOpen() ){
QSqlQuery query( this->database.database( this->connection_name ) );
query.exec( sql );
QSqlError error = query.lastError();
if (error.type() != QSqlError::NoError){
qWarning() << error.text() << endl << sql << endl;
}
while( query.next() ){
list.append(query.record());
}
} else {
qWarning() << "[PostgresDriver::executeQuery] Could not execute query because database is closed." << endl;
}
return list;
}
To copy to clipboard, switch view to plain text mode
Bookmarks