English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
هذا الدليل سيستخدم مكتبة libpqxx، وهي واجهة API الرسمية لمستخدمي PostgreSQL C++.
最新版本的libpqxx可以从下载libpqxx链接下载(Libpqxx下载)。因此,请下载最新版本并按照以下步骤-
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
在开始使用C / C ++ PostgreSQL接口之前,请在PostgreSQL安装目录中找到 pg_hba.conf 文件,并添加以下行-
# IPv4 local connections: host all all 127.0.0.1/32 md5
如果postgres服务器没有运行,可以使用以下命令启动/重新启动postgres服务器-
[root@host]# service postgresql restart Stopping postgresql service: [ OK ] Starting postgresql service: [ OK ]
هذه هي نماذج واجهات المشاريع المهمة، التي يمكن أن ت satisfy احتياجاتك من استخدام قاعدة بيانات PostgreSQL من برنامج C/C++. إذا كنت تبحث عن تطبيق أكثر تعقيدًا، يمكنك الرجوع إلى وثائق libpqxx الرسمية، أو استخدام api المتاحة تجاريًا.
S. No. | API & وصف |
---|---|
1 | pqxx::connection C( const std::string & dbstring ) هذا typedef سيتم استخدامه للاتصال بالقاعدة البيانات. هنا، dbstring يقدم المعلمات المطلوبة للاتصال بالقاعدة البيانات، مثل: dbname = testdb user = postgres password=pass123 hostaddr=127.0.0.1 port=5432. إذا تم إنشاء الاتصال بنجاح، فإنه يخلق C مع كائن الاتصال، يقدم وظائف عامة مفيدة. |
2 | C.is_open() طريقة is_open() هي الطريقة العامة لعنصر الاتصال وتعود قيمة بولية. إذا كان الاتصال نشطًا، فإنها تعود قيمة true، وإلا تعود قيمة false. |
3 | C.disconnect() هذه الطريقة تستخدم لفصل الاتصال بالقاعدة البيانات المفتوح. |
4 | pqxx::work W( C ) هذا typedef يستخدم لإنشاء عنصر معامل باستخدام الاتصال C، وسيستخدم لتنفيذ جملة SQL في الوضع المعامل. إذا تم إنشاء عنصر المعامل بنجاح، فإنه سيُتولى من قبل المتغير W، والذي سيستخدم لاستدعاء الطرق العامة لعنصر المعامل. |
5 | W.exec(const std::string & sql) هذه الطريقة العامة لعنصر المعامل تستخدم لتنفيذ جملة SQL. |
6 | W.commit() هذه الطريقة العامة لعنصر المعامل تستخدم لتحديد المعامل. |
7 | W.abort() هذه الطريقة العامة لعنصر المعامل تستخدم لتراجع المعامل. |
8 | pqxx::nontransaction N( C ) هذا typedef يستخدم لإنشاء عناصر غير معامل باستخدام الاتصال C، وسيستخدم لتنفيذ جملة SQL في الوضع غير المعامل. إذا تم إنشاء عنصر المعامل بنجاح، فإنه سيُتولى من قبل المتغير N، والذي سيستخدم لاستدعاء الطرق العامة للعنصر غير المعامل. |
9 | N.exec(const std::string & sql) هذه الطريقة العامة من قبل العنصر غير المعامل تستخدم لتنفيذ جملة SQL ويعود لها object result، وهو iterator يحتوي على جميع السجلات المنقولة. |
الخطوط التالية من كود C تظهر كيفية الاتصال بقاعدة البيانات الموجودة على الحاسوب المحلي الذي يعمل على منفذ 5432. هنا، استخدمت الأسلانة المائلة \ لتمديد السطر.
#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; } }
الآن، دعونا نقوم بترميز وتشغيل البرنامج المذكور أعلاه للاتصال بقاعدة البيانات testdb، التي تكون متاحة في نموذجك، يمكنك الوصول إليها باستخدام المستخدم postgres وكلمة المرور pass123.
يمكنك استخدام معرف المستخدم وكلمة المرور الخاصة بالقاعدة البيانات. تذكر الحفاظ على الترتيب المحدد لـ -lpqxx و-lpq! وإلا، سيعتقد الاتصال أن هناك نقصًا في الأسماء ويبدأ بـ "PQ" من الفونكشن.
$g++ test.cpp -lpqxx -lpq $./a.out تم فتح قاعدة البيانات بنجاح: testdb
الخطوط التالية من كود C تستخدم لإنشاء جدول في قاعدة البيانات التي تم إنشاؤها مسبقًا-
#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; } /* 创建SQL语句 */ sql = "CREATE TABLE COMPANY(" \ "ID INT PRIMARY KEY NOT NULL," \ "NAME TEXT NOT NULL," \ "AGE INT NOT NULL," \ "ADDRESS CHAR(50)," \ "SALARY REAL);" /* 创建事务对象. */ work W(C); /* تنفيذ استعلام SQL */ W.exec( sql ); W.commit(); cout << "تم إنشاء الجدول بنجاح" << endl; C.disconnect(); } catch (const std::exception &e) { cerr << e.what() << std::endl; return 1; } return 0; }
عند تجميع وتنفيذ البرنامج المحدد أعلاه، سيتم إنشاء جدول COMPANY في قاعدة بيانات testdb وسيتم عرض النصوص التالية
تم فتح قاعدة البيانات بنجاح: testdb تم إنشاء الجدول بنجاح
البرمجة C التالية تظهر كيفية إنشاء سجلات في جدول company الذي تم إنشاؤه في الأمثلة السابقة
#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; } /* إنشاء جملة 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);" /* 创建事务对象. */ work W(C); /* تنفيذ استعلام SQL */ W.exec( sql ); W.commit(); cout << "تم إنشاء السجلات بنجاح" << endl; C.disconnect(); } catch (const std::exception &e) { cerr << e.what() << std::endl; return 1; } return 0; }
عند تجميع وتنفيذ البرنامج المحدد أعلاه، سيتم إنشاء السجلات المحددة في جدول COMPANY وسيتم عرض النصوص التالية
تم فتح قاعدة البيانات بنجاح: testdb تم إنشاء السجلات بنجاح
البرمجة C التالية تظهر كيفية الحصول على عرض السجلات وعرضها من جدول COMPANY الذي تم إنشاؤه في الأمثلة السابقة
#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; } /* إنشاء جملة SQL */ sql = "SELECT * from COMPANY"; /* إنشاء كائن غير معامل. */ nontransaction N(C); /* تنفيذ استعلام SQL */ result R(N.exec(sql)); /* قائمة بجميع السجلات */ for (result::const_iterator c = R.begin(); c != R.end(); ++c) { cout << "الرقم التعريفي = " << c[0].as<int>() << endl; cout << "الاسم = " << c[1].as<string>() << endl; cout << "العمر = " << c[2].as<int>() << endl; cout << "العنوان = " << c[3].as<string>() << endl; cout << "الراتب = " << c[4].as<float>() << endl; } cout << "تم إتمام العمل بنجاح" << endl; C.disconnect(); } catch (const std::exception &e) { cerr << e.what() << std::endl; return 1; } return 0; }
عندما يتم ترميز وتنفيذ البرنامج المحدد أعلاه، سيتم إنتاج النتيجة التالية -
تم فتح قاعدة البيانات بنجاح: testdb الرقم التعريفي = 1 الاسم = بول العمر = 32 العنوان = كاليفورنيا الراتب = 20000 ID = 2 Name = Allen العمر = 25 Address = Texas Salary = 15000 الرقم التعريفي = 3 الاسم = تيدي العمر = 23 العنوان = النرويج الراتب = 20000 الرقم التعريفي = 4 الاسم = مارك العمر = 25 العنوان = ريتش موند الراتب = 65000 تم إتمام العمل بنجاح
البرمجة C التالية تظهر كيفية استخدام جملة UPDATE لتحديث أي سجل، ومن ثم الحصول على عرض السجلات المعدلة من جدول COMPANY
#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; } /* 创建事务对象. */ work W(C); /* Create SQL UPDATE statement */ sql = "UPDATE COMPANY set SALARY = 25000.00 where ID=1"; /* Execute SQL query */ W.exec( sql ); W.commit(); cout << "Records updated successfully" << endl; /* 创建 SQL SELECT 语句 */ sql = "SELECT * from COMPANY"; /* 创建一个非事务对象. */ nontransaction N(C); /* تنفيذ استعلام SQL */ result R(N.exec(sql)); /* قائمة بجميع السجلات */ for (result::const_iterator c = R.begin(); c != R.end(); ++c) { cout << "الرقم التعريفي = " << c[0].as<int>() << endl; cout << "الاسم = " << c[1].as<string>() << endl; cout << "العمر = " << c[2].as<int>() << endl; cout << "العنوان = " << c[3].as<string>() << endl; cout << "الراتب = " << c[4].as<float>() << endl; } cout << "تم إتمام العمل بنجاح" << endl; C.disconnect(); } catch (const std::exception &e) { cerr << e.what() << std::endl; return 1; } return 0; }
当上述给定的程序被编译和执行时,它将产生以下结果-
تم فتح قاعدة البيانات بنجاح: testdb Records updated successfully ID = 2 Name = Allen العمر = 25 Address = Texas Salary = 15000 الرقم التعريفي = 3 الاسم = تيدي العمر = 23 العنوان = النرويج الراتب = 20000 الرقم التعريفي = 4 الاسم = مارك العمر = 25 العنوان = ريتش موند الراتب = 65000 الرقم التعريفي = 1 الاسم = بول العمر = 32 العنوان = كاليفورنيا الراتب = 25000 تم إتمام العمل بنجاح
下面的 C 代码段显示了如何使用 DELETE 语句删除任何记录,然后从 COMPANY 表中获取并显示剩余的记录
#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; } /* 创建事务对象. */ work W(C); /* 创建 SQL DELETE 语句 */ sql = "DELETE from COMPANY where ID = 2"; /* تنفيذ استعلام SQL */ W.exec( sql ); W.commit(); cout << "Records deleted successfully" << endl; /* Create SQL SELECT statement */ sql = "SELECT * from COMPANY"; /* إنشاء كائن غير معامل. */ nontransaction N(C); /* تنفيذ استعلام SQL */ result R(N.exec(sql)); /* قائمة بجميع السجلات */ for (result::const_iterator c = R.begin(); c != R.end(); ++c) { cout << "الرقم التعريفي = " << c[0].as<int>() << endl; cout << "الاسم = " << c[1].as<string>() << endl; cout << "العمر = " << c[2].as<int>() << endl; cout << "العنوان = " << c[3].as<string>() << endl; cout << "الراتب = " << c[4].as<float>() << endl; } cout << "تم إتمام العمل بنجاح" << endl; C.disconnect(); } catch (const std::exception &e) { cerr << e.what() << std::endl; return 1; } return 0; }
عندما يتم ترميز وتنفيذ البرنامج المحدد أعلاه، سيتم إنتاج النتيجة التالية -
تم فتح قاعدة البيانات بنجاح: testdb تم حذف السجلات بنجاح الرقم التعريفي = 3 الاسم = تيدي العمر = 23 العنوان = النرويج الراتب = 20000 الرقم التعريفي = 4 الاسم = مارك العمر = 25 العنوان = ريتش موند الراتب = 65000 الرقم التعريفي = 1 الاسم = بول العمر = 32 العنوان = كاليفورنيا الراتب = 25000 تم إتمام العمل بنجاح