std::vector< Profile > DatabaseFacade::getUsers() { std::vector<Profile> profiles; if(!connected) { qDebug() << "Not connected to database"; return profiles; } QSqlQuery query; query.exec("SELECT * FROM Gamers"); QSqlError err = query.lastError(); if(err.isValid()) qDebug() << err.databaseText() << "\n" << err.driverText() << "\n" << err.nativeErrorCode(); while (query.next()) { int id = query.value(0).toInt(); QString name = query.value(1).toString(); QPixmap picture; picture.loadFromData(query.value(2).toByteArray()); profiles.emplace_back(id, name, picture); } query.clear(); return profiles; }
bool Application::notify(QObject * receiver, QEvent * e) { try { return QApplication::notify(receiver, e); } catch (Exception & e) { qCritical() << e.title() << ':' << e.description(); QMessageBox::critical(nullptr, e.title(), e.description()); } catch (QSqlQuery & q) { QString s; QTextStream str(&s); QSqlError e = q.lastError(); str << "Query: " << q.lastQuery() << '\n'; str << "Driver text: " << e.driverText() << '\n'; str << "Database text: " << e.databaseText() << '\n'; str << "Native error code: " << e.nativeErrorCode(); qCritical() << "Database error:" << s; QMessageBox::critical(nullptr, "Database error", s); } return false; }
std::vector< Score > DatabaseFacade::getHightScores( const QString& gameName_, int limit_ ) { std::vector< Score > scores; if(!connected) { qDebug() << "Not connected to database"; return scores; } QSqlQuery query; query.exec(queryGetHighScores.arg(gameName_)); QSqlError err = query.lastError(); if(err.isValid()) qDebug() << err.databaseText() << "\n" << err.driverText() << "\n" << err.nativeErrorCode(); while (query.next()) { QString name = query.value(0).toString(); QPixmap picture; picture.loadFromData(query.value(1).toByteArray()); int score = query.value(2).toInt(); scores.emplace_back(name, picture, score); } query.clear(); return scores; }
void checkDatabaseError(const QSqlDatabase &db) { QSqlError lastError = db.lastError(); if (lastError.type() != QSqlError::NoError) { #if QT_VERSION >= 0x050300 throw Exception { lastError.nativeErrorCode().toInt(), lastError.text().toStdString() }; #else throw Exception { lastError.number(), lastError.text().toStdString() }; #endif } }
QT_BEGIN_NAMESPACE #ifndef QT_NO_DEBUG_STREAM QDebug operator<<(QDebug dbg, const QSqlError &s) { QDebugStateSaver saver(dbg); dbg.nospace(); dbg << "QSqlError(" << s.nativeErrorCode() << ", " << s.driverText() << ", " << s.databaseText() << ')'; return dbg; }
void DatabaseFacade::addUserStat( int userId, const QString& gameName_, int score_ ) { if(!connected) { qDebug() << "Not connected to database"; return; } QSqlQuery query; QSqlQuery query2; qDebug() << "Executing query : \n\t" << queryGetGamerHighScore.arg(gameName_).arg(userId); query.exec(queryGetGamerHighScore.arg(gameName_).arg(userId)); QSqlError err = query.lastError(); if(err.isValid()) qDebug() << err.databaseText() << "\n" << err.driverText() << "\n" << err.nativeErrorCode(); if(query.next()) { if(query.value(1).toInt() < score_) { qDebug() << "Executing query : \n\t" << queryUpdateHighScore.arg(score_).arg(query.value(0).toString()).arg(userId); query2.exec(queryUpdateHighScore.arg(score_).arg(query.value(0).toString()).arg(userId)); err = query2.lastError(); if(err.isValid()) qDebug() << err.databaseText() << "\n" << err.driverText() << "\n" << err.nativeErrorCode(); } } else { qDebug() << "Executing query : \n\t" << queryInsertHighScore.arg(userId).arg(gameName_).arg(score_); query2.exec(queryInsertHighScore.arg(userId).arg(gameName_).arg(score_)); err = query2.lastError(); if(err.isValid()) qDebug() << err.databaseText() << "\n" << err.driverText() << "\n" << err.nativeErrorCode(); } }
void DatabaseFacade::openConnexion() { db.setHostName( DATABASE_IP ); db.setDatabaseName( DATABASE_NAME ); db.setUserName( DATABASE_USER ); db.setPassword( DATABASE_PASS ); connected = db.open(); if(!connected) { qDebug() << "Connexion to database failed"; QSqlError err = db.lastError(); if(err.isValid()) qDebug() << err.databaseText() << "\n" << err.driverText() << "\n" << err.nativeErrorCode(); } }