3.4\ Obtentions d'informations sur la connexion
#include <libpq-fe.h> //Ici nous rajoutons la bibliothèque qui est "libpq", son language est le C.
#include <libpq-fe.h>
#include <iostream>
#include <string>
enum CODES_RETOURS
{
TOUT_VA_BIEN,
ERR_PING_REJECT,
ERR_PING_NORESPONSE,
ERR_PING_NOATTEMPT,
ERR_PING_UNKNOWN,
};
int main()
{
int code-retour=0; //Tout va bien en sortie.
char informations_de_connexion []"host=postgresql.bts-malraux.net port=5432"; //Ici nous indiquons le type, en l'occurrence "character" ensuite nous précisions l'hôte.
PGPing code_retour_ping; //Le ping est correct en sortie.
unsigned int code_retour = TOUT_VA_BIEN;
std::string conninfo = "host=postgresql.bts-malraux72.net port=5432";
PGPing ping_result;
ping_result = PQping(conninfo.c_str());
code_retour=0; //Tout ira bien en sortie
code_retour_ping=PQPing (informations_de_connexion);//Ici nous précisons les informations de connexion
if(ping_result == PQPING_OK)
{
PGconn *dbconn;
std::string db = " dbname=a.foulon";
std::string uname = " user=a.foulon";
std::string pass = " password=P@ssword";
std::cout << "Le serveur est en cours d'exécution et semble accepter les connexions." << std::endl;
conninfo += db;
conninfo += uname;
conninfo += pass;
dbconn = PQconnectdb(conninfo.c_str());
}
else if(ping_result == PQPING_REJECT)
{
std::cerr << "Le serveur est en cours d'exécution mais est dans un état qui interdit les connexions (démarrage, arrêt, restauration après crash)." << std::endl;
code_retour = ERR_PING_REJECT;
}
else if(ping_result == PQPING_NO_RESPONSE)
{
std::cerr << "Le serveur n'a pas pu être contacté. Cela pourrait indiquer que le serveur n'est pas en cours d'exécution ou qu'il y a un problème avec les paramètres de connexion donnés (par exemple un mauvais numéro de port). Cela peut aussi indiquer un problème de connexion réseau (par exemple un pare-feu qui bloque la demande de connexion)." << std::endl;
code_retour = ERR_PING_NORESPONSE;
}
else if(ping_result == PQPING_NO_ATTEMPT)
{
std::cerr << "Aucune tentative n'a été faite pour contacter le serveur à cause des paramètres fournis erronnés ou à cause d'un problème au niveau client (par exemple un manque mémoire)." << std::endl;
code_retour = ERR_PING_NOATTEMPT;
}
else
{
std::cerr << "Erreur de ping inconnue" << std::endl;
code_retour = ERR_PING_UNKNOWN;
}
if(code_retour_ping)==PQPing_Ok) //Etablissement de la connexion ou affichage
{
std::cout <<"Le serveur est accessible, la connexion a bel et bien été établie !" <<std::endl;
}
else
{
std::cerr <<"Le serveur n'est pas accessible, la connexion n'as donc pas été établie !" <<std::endl;
}
return code_retour;
return code_retour;
}