English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Ce tutoriel utilisera la bibliothèque libpqxx, qui est une interface officielle C pour PostgreSQL ++API client. Le code source de libpqxx est disponible sous licence BSD, donc vous pouvez le télécharger gratuitement, le transmettre à autrui, le modifier, le vendre, le inclure dans votre propre code et partager vos modifications avec qui vous le souhaitez.
La dernière version de libpqxx peut être téléchargée via le lien de téléchargement de libpqxx (Téléchargement de libpqxx) Par conséquent, téléchargez la dernière version et suivez les étapes suivantes-
wget http://pqxx.org/download/software/libpqxx/libpqxx-4.0.tar.gz tar xvfz libpqxx-4.0.tar.gz cd libpqxx-4.0 ./configure make make install
Avant de commencer à utiliser C / C ++ Avant d'utiliser l'interface PostgreSQL, trouvez le fichier pg_hba.conf dans le répertoire d'installation de PostgreSQL et ajoutez les lignes suivantes-
# IPv4 Connexions locales: host all all 127.0.0.1/32 md5
Si le serveur postgres n'est pas en cours d'exécution, vous pouvez utiliser la commande suivante pour le démarrer/Redémarrage du serveur postgres-
[root@host]# service postgresql restart Arrêt du service postgresql: [ OK ] Démarrage du service postgresql: [ OK ]
Voici des exemples d'interfaces importantes qui peuvent répondre à vos besoins pour accéder à partir de C/C++La demande d'utilisation de la base de données PostgreSQL dans le programme. Si vous cherchez une application plus complexe, vous pouvez consulter la documentation officielle de libpqxx ou utiliser des api disponibles commercialement.
N° | API & Description |
---|---|
1 | pqxx::connection C( const std::string & dbstring ) C'est un typedef, qui sera utilisé pour se connecter à la base de données. Ici, dbstring fournit les paramètres nécessaires pour se connecter à la base de données, par exemple : dbname = testdb user = postgres password=pass123 hostaddr=127.0.0.1 port=5432. Si la connexion est établie avec succès, elle crée une connexion entre C et l'objet de connexion, fournissant diverses fonctions utiles et des fonctions publiques. |
2 | C.is_open() La méthode is_open() est une méthode publique de l'objet de connexion et retourne une valeur booléenne. Si la connexion est active, cette méthode retourne true, sinon false. |
3 | C.disconnect() Cette méthode est utilisée pour couper la connexion à la base de données ouverte. |
4 | pqxx::work W( C ) C'est un typedef, utilisé pour créer des objets transactionnels en utilisant la connexion C, et qui finira par être utilisé pour exécuter des instructions SQL en mode transactionnel. Si l'objet transactionnel est créé avec succès, il sera attribué à la variable W, qui sera utilisée pour accéder aux méthodes publiques liées à l'objet transactionnel. |
5 | W.exec(const std::string & sql) Cette méthode publique de l'objet transactionnel sera utilisée pour exécuter des instructions SQL. |
6 | W.commit() Cette méthode publique de l'objet transactionnel sera utilisée pour commit la transaction. |
7 | W.abort() Cette méthode publique de l'objet transactionnel sera utilisée pour rollback la transaction. |
8 | pqxx::nontransaction N( C ) C'est un typedef, qui sera utilisé pour créer des objets non transactionnels en utilisant la connexion C, et qui finira par être utilisé pour exécuter des instructions SQL en mode non transactionnel. Si l'objet transactionnel est créé avec succès, il sera attribué à la variable N, qui sera utilisée pour accéder aux méthodes publiques liées à l'objet non transactionnel. |
9 | N.exec(const std::string & sql) Cette méthode publique provenant d'un objet non transactionnel sera utilisée pour exécuter des instructions SQL et renvoyer un objet result, qui est en réalité un iterateur contenant toutes les enregistrements retournés. |
Le segment de code C suivant montre comment se connecter à la base de données sur le port5432base de données existante qui s'exécute sur votre ordinateur local. Ici, j'utilise les barres obliques inversées '\' pour indiquer la continuité des lignes.
#include <iostream> #include <pqxx/pqxx> using namespace std; using namespace pqxx; int main(int argc, char* argv[]) { try { connection C("dbname = testdb user = postgres password = cohondob \ hostaddr = 127.0.0.1 port = 5432"); if (C.is_open()) { cout << "Opened database successfully: " << C.dbname() << endl; } else { cout << "Can't open database" << endl; return 1; } C.disconnect(); } catch (const std::exception &e) { cerr << e.what() << std::endl; return 1; } }
Maintenant, exécutons et compilons le programme ci-dessus pour nous connecter à notre base de données testdb, qui est déjà disponible dans votre schéma, et qui peut être accédée avec l'utilisateur postgres et le mot de passe pass123l'accès.}
Vous pouvez utiliser l'ID utilisateur et le mot de passe pour configurer la base de données. N'oubliez pas de garder-lpqxx et-lpq dans l'ordre donné! Sinon, le connecteur considérera que le nom manque et utilisera des fonctions commençant par "PQ".
$g++ test.cpp -lpqxx -lpq $./a.out Base de données ouverte avec succès : testdb
Le segment de code C suivant sera utilisé pour créer la table dans la base de données créée précédemment-
#include <iostream> #include <pqxx/pqxx> using namespace std; using namespace pqxx; int main(int argc, char* argv[]) { char * sql; try { connection C("dbname = testdb user = postgres password = cohondob \ hostaddr = 127.0.0.1 port = 5432"); if (C.is_open()) { cout << "Opened database successfully: " << C.dbname() << endl; } else { cout << "Can't open database" << endl; return 1; } /* Créer une requête SQL */ sql = "CREATE TABLE COMPANY(" \ "ID INT PRIMARY KEY NOT NULL," \ "NAME TEXT NOT NULL," \ "AGE INT NOT NULL," \ "ADDRESS CHAR(50)," \ "SALARY REAL );"; /* Créer un objet transaction. */ work W(C); /* Exécuter une requête SQL */ W.exec(sql); W.commit(); cout << "Table created successfully" << endl; C.disconnect(); } catch (const std::exception &e) { cerr << e.what() << std::endl; return 1; } return 0; }
Lorsque le programme donné ci-dessus est compilé et exécuté, il crée la table COMPANY dans la base de données testdb et affiche les instructions suivantes-
Base de données ouverte avec succès : testdb Table créée avec succès
Le segment de code C suivant montre comment créer des enregistrements dans la table company créée dans l'exemple précédent-
#include <iostream> #include <pqxx/pqxx> using namespace std; using namespace pqxx; int main(int argc, char* argv[]) { char * sql; try { connection C("dbname = testdb user = postgres password = cohondob \ hostaddr = 127.0.0.1 port = 5432"); if (C.is_open()) { cout << "Opened database successfully: " << C.dbname() << endl; } else { cout << "Can't open database" << endl; return 1; } /* Créer une instruction SQL */ sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "\ "VALUES (1, 'Paul', 32, 'California', 20000.00 ); "\ "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "\ "VALUES (2, 'Allen', 25, 'Texas', 15000.00 ); "\ "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" \ "VALUES (3, 'Teddy', 23, 'Norway', 20000.00 );" \ "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" \ "VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 );"; /* Créer un objet transaction. */ work W(C); /* Exécuter une requête SQL */ W.exec(sql); W.commit(); cout << "Records created successfully" << endl; C.disconnect(); } catch (const std::exception &e) { cerr << e.what() << std::endl; return 1; } return 0; }
Lorsque le programme donné ci-dessus est compilé et exécuté, il crée l'enregistrement donné dans la table COMPANY et affiche les deux lignes suivantes-
Base de données ouverte avec succès : testdb Records created successfully
Le segment de code C suivant montre comment obtenir et afficher les enregistrements à partir du tableau COMPANY créé dans l'exemple précédent
#include <iostream> #include <pqxx/pqxx> using namespace std; using namespace pqxx; int main(int argc, char* argv[]) { char * sql; try { connection C("dbname = testdb user = postgres password = cohondob \ hostaddr = 127.0.0.1 port = 5432"); if (C.is_open()) { cout << "Opened database successfully: " << C.dbname() << endl; } else { cout << "Can't open database" << endl; return 1; } /* Créer une instruction SQL */ sql = "SELECT * from COMPANY"; /* Créer un objet non transactionnel. */ nontransaction N(C); /* Exécuter une requête SQL */ result R(N.exec(sql)); /* Lister tous les enregistrements */ for (result::const_iterator c = R.begin(); c != R.end(); ++c) { cout << "ID = " << c[0].as<int>() << endl; cout << "Nom = " << c[1].as<string>() << endl; cout << "Âge = " << c[2].as<int>() << endl; cout << "Adresse = " << c[3].as<string>() << endl; cout << "Salaire = " << c[4].as<float>() << endl; } cout << "Opération effectuée avec succès" << endl; C.disconnect(); } catch (const std::exception &e) { cerr << e.what() << std::endl; return 1; } return 0; }
Lorsque le programme donné ci-dessus est compilé et exécuté, il génère les résultats suivants-
Base de données ouverte avec succès : testdb ID = 1 Nom = Paul Âge = 32 Adresse = Californie Salaire = 20000 ID = 2 Name = Allen Âge = 25 Address = Texas Salaire = 15000 ID = 3 Nom = Teddy Âge = 23 Adresse = Norvège Salaire = 20000 ID = 4 Nom = Mark Âge = 25 Adresse = Rich-Mond Salaire = 65000 Opération effectuée avec succès
Le segment de code C suivant montre comment utiliser l'instruction UPDATE pour mettre à jour n'importe quel enregistrement, puis partir de la table COMPANY-Obtenir et afficher les enregistrements mis à jour
#include <iostream> #include <pqxx/pqxx> using namespace std; using namespace pqxx; int main(int argc, char* argv[]) { char * sql; try { connection C("dbname = testdb user = postgres password = cohondob \ hostaddr = 127.0.0.1 port = 5432"); if (C.is_open()) { cout << "Opened database successfully: " << C.dbname() << endl; } else { cout << "Can't open database" << endl; return 1; } /* Créer un objet transaction. */ work W(C); /* Créer une instruction SQL UPDATE */ sql = "UPDATE COMPANY set SALARY =" 25000.00 where ID=1"; /* Exécuter une requête SQL */ W.exec(sql); W.commit(); cout << "Records updated successfully" << endl; /* Créer une instruction SQL SELECT */ sql = "SELECT * from COMPANY"; /* Créer un objet non transactionnel. */ nontransaction N(C); /* Exécuter une requête SQL */ result R(N.exec(sql)); /* Lister tous les enregistrements */ for (result::const_iterator c = R.begin(); c != R.end(); ++c) { cout << "ID = " << c[0].as<int>() << endl; cout << "Nom = " << c[1].as<string>() << endl; cout << "Âge = " << c[2].as<int>() << endl; cout << "Adresse = " << c[3].as<string>() << endl; cout << "Salaire = " << c[4].as<float>() << endl; } cout << "Opération effectuée avec succès" << endl; C.disconnect(); } catch (const std::exception &e) { cerr << e.what() << std::endl; return 1; } return 0; }
Lorsque le programme ci-dessus est compilé et exécuté, il produira les résultats suivants-
Base de données ouverte avec succès : testdb Records updated successfully ID = 2 Name = Allen Âge = 25 Address = Texas Salaire = 15000 ID = 3 Nom = Teddy Âge = 23 Adresse = Norvège Salaire = 20000 ID = 4 Nom = Mark Âge = 25 Adresse = Rich-Mond Salaire = 65000 ID = 1 Nom = Paul Âge = 32 Adresse = Californie Salaire = 25000 Opération effectuée avec succès
Le segment de code C suivant montre comment utiliser l'instruction DELETE pour supprimer n'importe quel enregistrement, puis partir de la table COMPANY-Obtenir et afficher les enregistrements restants
#include <iostream> #include <pqxx/pqxx> using namespace std; using namespace pqxx; int main(int argc, char* argv[]) { char * sql; try { connection C("dbname = testdb user = postgres password = cohondob \ hostaddr = 127.0.0.1 port = 5432"); if (C.is_open()) { cout << "Opened database successfully: " << C.dbname() << endl; } else { cout << "Can't open database" << endl; return 1; } /* Créer un objet transaction. */ work W(C); /* Créer une instruction SQL DELETE */ sql = "DELETE from COMPANY where ID =" 2"; /* Exécuter une requête SQL */ W.exec(sql); W.commit(); cout << "Enregistrements supprimés avec succès" << endl; /* Créer une déclaration SELECT SQL */ sql = "SELECT * from COMPANY"; /* Créer un objet non transactionnel. */ nontransaction N(C); /* Exécuter une requête SQL */ result R(N.exec(sql)); /* Lister tous les enregistrements */ for (result::const_iterator c = R.begin(); c != R.end(); ++c) { cout << "ID = " << c[0].as<int>() << endl; cout << "Nom = " << c[1].as<string>() << endl; cout << "Âge = " << c[2].as<int>() << endl; cout << "Adresse = " << c[3].as<string>() << endl; cout << "Salaire = " << c[4].as<float>() << endl; } cout << "Opération effectuée avec succès" << endl; C.disconnect(); } catch (const std::exception &e) { cerr << e.what() << std::endl; return 1; } return 0; }
Lorsque le programme donné ci-dessus est compilé et exécuté, il génère les résultats suivants-
Base de données ouverte avec succès : testdb Enregistrements supprimés avec succès ID = 3 Nom = Teddy Âge = 23 Adresse = Norvège Salaire = 20000 ID = 4 Nom = Mark Âge = 25 Adresse = Rich-Mond Salaire = 65000 ID = 1 Nom = Paul Âge = 32 Adresse = Californie Salaire = 25000 Opération effectuée avec succès