English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Este tutorial utilizará la biblioteca libpqxx, que es la interfaz oficial de C para PostgreSQL ++API de cliente. El código fuente de libpqxx está disponible bajo la licencia BSD, por lo que puede descargarlo gratuitamente, compartirlo con otros, modificarlo, venderlo, incluirlo en su código y compartir sus cambios con cualquier persona.
La última versión de libpqxx se puede descargar desde el enlace de descarga de libpqxx (Descarga de libpqxx). Por lo tanto, descargue la última versión y siga los siguientes pasos-
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
Antes de comenzar a usar C / C ++ Antes de usar la interfaz PostgreSQL, encuentre el archivo pg_hba.conf en la carpeta de instalación de PostgreSQL y agregue las siguientes líneas-
# IPv4 Conexiones locales: host all all 127.0.0.1/32 md5
Si el servidor postgres no está en ejecución, puede usar el siguiente comando para iniciarlo/Reiniciando el servidor postgres-
[root@host]# service postgresql restart Deteniendo el servicio de postgresql: [...] [OK] Iniciando el servicio de postgresql: [...] [OK]
A continuación, se muestra el importante procedimiento de interfaz, que puede satisfacer sus necesidades de acceso desde C/C++Se requiere el uso de la base de datos PostgreSQL en el programa. Si está buscando una aplicación más compleja, puede consultar la documentación oficial de libpqxx o utilizar api disponibles comercialmente.
N.º | API y descripción |
---|---|
1 | pqxx::connection C( const std::string & dbstring ) Este typedef se utiliza para conectarse a la base de datos. Aquí, dbstring proporciona los parámetros necesarios para conectarse a la base de datos, por ejemplo: dbname = testdb user = postgres password=pass123 hostaddr=127.0.0.1 port=5432. Si se establece con éxito la conexión, se crea una conexión C con el objeto de conexión, proporcionando varias funciones públicas útiles. |
2 | C.is_open() El método is_open() es un método público del objeto de conexión y devuelve un valor booleano. Si la conexión está activa, este método devuelve true, de lo contrario devuelve false. |
3 | C.disconnect() Este método se utiliza para desconectar la conexión de base de datos abierta. |
4 | pqxx::work W( C ) Este typedef se utiliza para crear un objeto transaccional utilizando la conexión C, que finalmente se utiliza para ejecutar instrucciones SQL en modo transaccional. Si se crea con éxito el objeto transaccional, se asignará a la variable W, que se utilizará para acceder a los métodos públicos relacionados con el objeto transaccional. |
5 | W.exec(const std::string & sql) Este método público del objeto transaccional se utilizará para ejecutar instrucciones SQL. |
6 | W.commit() Este método público del objeto transaccional se utilizará para confirmar la transacción. |
7 | W.abort() Este método público del objeto transaccional se utilizará para revertir la transacción. |
8 | pqxx::nontransaction N( C ) Este typedef se utilizará para crear objetos no transaccionales utilizando la conexión C, que finalmente se utilizarán para ejecutar instrucciones SQL en modo no transaccional. Si se crea con éxito el objeto transaccional, se asignará a la variable N, que se utilizará para acceder a los métodos públicos relacionados con el objeto no transaccional. |
9 | N.exec(const std::string & sql) Este método público de un objeto no transaccional se utilizará para ejecutar instrucciones SQL y devolver un objeto result, que es un iterator que realmente guarda todos los registros devueltos. |
El siguiente segmento de código C muestra cómo conectarse a la base de datos en el puerto5432de la base de datos existente ejecutándose en el equipo local. Aquí, uso la barra invertida \ para la continuidad de la línea.
#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; } }
Ahora, ejecutemos y compilamos el programa anterior para conectarnos a nuestra base de datos testdb, que ya está disponible en su esquema y se puede acceder con el usuario postgres y la contraseña pass123acceso.}
Puede usar el ID de usuario y la contraseña según la configuración de la base de datos. Recuerde mantener-lpqxx y-¡El orden dado de lpq es importante! De lo contrario, el conectador considerará que falta el nombre y utilizará funciones que comienzan con "PQ".
$g++ test.cpp -lpqxx -lpq $./a.out Base de datos abierta con éxito: testdb
El siguiente segmento de código C se utilizará para crear la tabla en la base de datos previamente creada-
#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; } /* Crear sentencia 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); /* Ejecutar consulta 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; }
Cuando se compila y ejecuta el programa dado anteriormente, creará la tabla COMPANY en la base de datos testdb y mostrará la siguiente declaración-
Base de datos abierta con éxito: testdb Table created successfully
El siguiente segmento de código C muestra cómo crear registros en la tabla company creada en el ejemplo anterior-
#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); /* Ejecutar consulta 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; }
Cuando se compila y ejecuta el programa dado anteriormente, creará el registro dado en la tabla COMPANY y mostrará las siguientes dos líneas-
Base de datos abierta con éxito: testdb Records created successfully
下面的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"; /* Crear objeto no transaccional. */ nontransaction N(C); /* ejecutar consulta SQL */ result R(N.exec(sql)); /* listar todos los registros */ for (result::const_iterator c = R.begin(); c != R.end(); ++c) { cout << "ID = " << c[0].as<int>() << endl; cout << "Nombre = " << c[1].as<string>() << endl; cout << "Edad = " << c[2].as<int>() << endl; cout << "Dirección = " << c[3].as<string>() << endl; cout << "Salario = " << c[4].as<float>() << endl; } cout << "Operación realizada con éxito" << endl; C.disconnect(); } catch (const std::exception &e) { cerr << e.what() << std::endl; return 1; } return 0; }
Al compilar y ejecutar el programa dado anteriormente, se producirá el siguiente resultado-
Base de datos abierta con éxito: testdb ID = 1 Nombre = Paul Edad = 32 Dirección = California Salario = 20000 ID = 2 Name = Allen Edad = 25 Address = Texas Salario = 15000 ID = 3 Nombre = Teddy Edad = 23 Dirección = Noruega Salario = 20000 ID = 4 Nombre = Mark Edad = 25 Dirección = Rich-Mond Salario = 65000 Operación realizada con éxito
下面的 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); /* 创建 SQL UPDATE 语句 */ sql = "UPDATE COMPANY set SALARY =" 25000.00 where ID=1"; /* 执行 SQL 查询 */ W.exec(sql); W.commit(); cout << "Records updated successfully" << endl; /* 创建 SQL SELECT 语句 */ sql = "SELECT * from COMPANY"; /* 创建一个非事务对象. */ nontransaction N(C); /* ejecutar consulta SQL */ result R(N.exec(sql)); /* listar todos los registros */ for (result::const_iterator c = R.begin(); c != R.end(); ++c) { cout << "ID = " << c[0].as<int>() << endl; cout << "Nombre = " << c[1].as<string>() << endl; cout << "Edad = " << c[2].as<int>() << endl; cout << "Dirección = " << c[3].as<string>() << endl; cout << "Salario = " << c[4].as<float>() << endl; } cout << "Operación realizada con éxito" << endl; C.disconnect(); } catch (const std::exception &e) { cerr << e.what() << std::endl; return 1; } return 0; }
当上述给定的程序被编译和执行时,它将产生以下结果-
Base de datos abierta con éxito: testdb Records updated successfully ID = 2 Name = Allen Edad = 25 Address = Texas Salario = 15000 ID = 3 Nombre = Teddy Edad = 23 Dirección = Noruega Salario = 20000 ID = 4 Nombre = Mark Edad = 25 Dirección = Rich-Mond Salario = 65000 ID = 1 Nombre = Paul Edad = 32 Dirección = California Salario = 25000 Operación realizada con éxito
下面的 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"; /* ejecutar consulta SQL */ W.exec(sql); W.commit(); cout << "Registros eliminados con éxito" << endl; /* Crear declaración SELECT SQL */ sql = "SELECT * from COMPANY"; /* Crear objeto no transaccional. */ nontransaction N(C); /* ejecutar consulta SQL */ result R(N.exec(sql)); /* listar todos los registros */ for (result::const_iterator c = R.begin(); c != R.end(); ++c) { cout << "ID = " << c[0].as<int>() << endl; cout << "Nombre = " << c[1].as<string>() << endl; cout << "Edad = " << c[2].as<int>() << endl; cout << "Dirección = " << c[3].as<string>() << endl; cout << "Salario = " << c[4].as<float>() << endl; } cout << "Operación realizada con éxito" << endl; C.disconnect(); } catch (const std::exception &e) { cerr << e.what() << std::endl; return 1; } return 0; }
Al compilar y ejecutar el programa dado anteriormente, se producirá el siguiente resultado-
Base de datos abierta con éxito: testdb Registros eliminados con éxito ID = 3 Nombre = Teddy Edad = 23 Dirección = Noruega Salario = 20000 ID = 4 Nombre = Mark Edad = 25 Dirección = Rich-Mond Salario = 65000 ID = 1 Nombre = Paul Edad = 32 Dirección = California Salario = 25000 Operación realizada con éxito