Быстрый старт для С++

В этом разделе описывается разработка приложений на языке С++, взаимодействующих с СУБД Компонента.

Создание тестовой базы данных

Создайте тестовую базу данных, с которой будет работать приложение. Чтобы создать тестовую базу данных testdb, запустите интерфейс командной строки Компонента (psql) и выполните команду:
CREATE DATABASE testdb;
Для выполнения определенных команд вам могут потребоваться права на подключение к БД и набор прав для работы с данными (DDL, DML). Убедитесь, что у вашей учетной записи есть необходимые права доступа, или войдите в систему под учетной записью, которой такие права предоставлены (например, postgres).
Убедитесь, что новая база данных создана. Для этого в командной строке выполните команду \l. Вы увидите примерно следующее:
Раскрыть type=bash
postgres-# \l
                             List of databases
   Name    |  Owner   | Encoding | Collate | Ctype |   Access privileges
-----------+----------+----------+---------+-------+-----------------------
 postgres  | postgres | UTF8     | C       | C     |
 template0 | postgres | UTF8     | C       | C     | =c/postgres          +
           |          |          |         |       | postgres=CTc/postgres
 template1 | postgres | UTF8     | C       | C     | =c/postgres          +
           |          |          |         |       | postgres=CTc/postgres
 testdb    | postgres | UTF8     | C       | C     |
(4 rows)
postgres-#

Подключение к базе данных

Приведенный ниже код реализует подключение к базе данных на локальной машине через порт 5433 от имени пользователя postgres.
Раскрыть type=c++
#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 = <пароль> \
      hostaddr = 127.0.0.1 port = 5433");
      if (C.is_open()) {
        cout << "Подключение к базе данных " << C.dbname() << " установлено." << endl;
      } else {
        cout << "Не удается установить подключение к базе данных." << endl;
        return 1;
      }
      C.disconnect ();
   } catch (const std::exception &e) {
      cerr << e.what() << std::endl;
      return 1;
   }
}
Скомпилируйте программу и выполните ее:
Раскрыть type=bash
$ gсс test.cpp -lpqxx -lpq
$ ./a.out
Подключение к базе данных testdb установлено.

Создание таблицы

Приведенный ниже код создает таблицу MYSTORE в базе данных testdb.
Раскрыть type=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 = <пароль> \
      hostaddr = 127.0.0.1 port = 5433");
      if (C.is_open()) {
         cout << "Подключение к базе данных " << C.dbname() << " установлено." << endl;
      } else {
         cout << "Не удается установить подключение к базе данных." << endl;
         return 1;
      }

      /* Создать инструкцию SQL */
      sql = "CREATE TABLE MYSTORE("  \
      "ID INT PRIMARY KEY     NOT NULL," \
      "ТИП            TEXT    NOT NULL," \
      "ЦВЕТ           TEXT    NOT NULL," \
      "МАТЕРИАЛ       TEXT    NOT NULL," \
      "ЗАПАС          INT," \
      "ЦЕНА           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;
}
Скомпилируйте программу и выполните ее:
Раскрыть type=bash
$ gсс test.cpp -lpqxx -lpq
$ ./a.out
Подключение к базе данных testdb установлено.
Таблица создана успешно

Операция INSERT

Приведенный ниже код создает записи в таблице MYSTORE:
Раскрыть type=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 = <пароль> \
      hostaddr = 127.0.0.1 port = 5433");
      if (C.is_open()) {
         cout << "Подключение к базе данных " << C.dbname() << " установлено." << endl;
      } else {
         cout << "Не удается установить подключение к базе данных." << endl;
         return 1;
      }

      /* Создать инструкцию SQL */
      sql = "INSERT INTO MYSTORE (ID,ТИП,ЦВЕТ,МАТЕРИАЛ,ЗАПАС,ЦЕНА) "  \
         "VALUES (1, 'Футболка', 'Синий', 'Хлопок', 500, 2000.00 ); " \
         "INSERT INTO MYSTORE (ID,ТИП,ЦВЕТ,МАТЕРИАЛ,ЗАПАС,ЦЕНА) "  \
         "VALUES (2, 'Футболка', 'Желтый', 'Хлопок', 500, 2000.00 ); " \
         "INSERT INTO MYSTORE (ID,ТИП,ЦВЕТ,МАТЕРИАЛ,ЗАПАС,ЦЕНА) "  \
         "VALUES (3, 'Футболка', 'Красный', 'Хлопок', 500, 2000.00 ); " \
         "INSERT INTO MYSTORE (ID,ТИП,ЦВЕТ,МАТЕРИАЛ,ЗАПАС,ЦЕНА) "  \
         "VALUES (4, 'Рубашка', 'Синий', 'Шелк', 400, 2500.00 ); " \
         "INSERT INTO MYSTORE (ID,ТИП,ЦВЕТ,МАТЕРИАЛ,ЗАПАС,ЦЕНА) "  \
         "VALUES (5, 'Рубашка', 'Белый', 'Хлопок', 600, 1400.00 ); " \
         "INSERT INTO MYSTORE (ID,ТИП,ЦВЕТ,МАТЕРИАЛ,ЗАПАС,ЦЕНА) "  \
         "VALUES (6, 'Свитер', 'Синий', 'Шерсть', 100, 4000.00 ); " \
         "INSERT INTO MYSTORE (ID,ТИП,ЦВЕТ,МАТЕРИАЛ,ЗАПАС,ЦЕНА) "  \
         "VALUES (7, 'Футболка', 'Синий', 'Нейлон', 500, 1000.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;
}
Скомпилируйте программу и выполните ее:
Раскрыть type=bash
$ gсс test.cpp -lpqxx -lpq
$ ./a.out
Подключение к базе данных testdb установлено.
Записи созданы успешно.

Операция SELECT

Приведенный ниже код выводит на экран записи из таблицы MYSTORE:
Раскрыть type=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 = <пароль> \
      hostaddr = 127.0.0.1 port = 5433");
      if (C.is_open()) {
         cout << "Подключение к базе данных " << C.dbname() << " установлено." << endl;
      } else {
         cout << "Не удается установить подключение к базе данных." << endl;
         return 1;
      }

      /* Создать инструкцию SQL */
      sql = "SELECT * from MYSTORE";

      /* Создать нетранзакционный объект */
      nontransaction N(C);

      /* Выполнить SQL-запрос */
      result R( N.exec( sql ));

      /* Вывести записи */
      for (result::const_iterator c = R.begin(); c != R.end(); ++c) {
         cout << "ID = " << c[0].as<int>() << endl;
         cout << "Тип = " << c[1].as<string>() << endl;
         cout << "Цвет = " << c[2].as<string>() << endl;
         cout << "Материал = " << c[3].as<string>() << endl;
         cout << "Запас = " << c[4].as<int>() << endl;
         cout << "Цена = " << c[5].as<float>() << endl;
         cout << endl;
      }
      cout << "Операция выполнена успешно." << endl;
      C.disconnect ();
   } catch (const std::exception &e) {
      cerr << e.what() << std::endl;
      return 1;
   }

   return 0;
}
Скомпилируйте программу и выполните ее:
Раскрыть type=bash
$ gсс test.cpp -lpqxx -lpq
$ ./a.out
Подключение к базе данных testdb установлено.
ID = 1
Тип = Футболка
Цвет = Синий
Материал = Хлопок
Запас = 500
Цена = 2000

ID = 2
Тип = Футболка
Цвет = Желтый
Материал = Хлопок
Запас = 500
Цена = 2000

ID = 3
Тип = Футболка
Цвет = Красный
Материал = Хлопок
Запас = 500
Цена = 2000

ID = 4
Тип = Рубашка
Цвет = Синий
Материал = Шелк
Запас = 400
Цена = 2500

ID = 5
Тип = Рубашка
Цвет = Белый
Материал = Хлопок
Запас = 600
Цена = 1400

ID = 6
Тип = Свитер
Цвет = Синий
Материал = Шерсть
Запас = 100
Цена = 4000

ID = 7
Тип = Футболка
Цвет = Синий
Материал = Нейлон
Запас = 500
Цена = 1000

Операция выполнена успешно.

Операция UPDATE

Приведенный ниже код изменяет данные в таблице MYSTORE с помощью операции UPDATE и выводит на экран обновленные записи:
Раскрыть type=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 = <пароль> \
      hostaddr = 127.0.0.1 port = 5433");
      if (C.is_open()) {
         cout << "Подключение к базе данных " << C.dbname() << " установлено." << endl;
      } else {
         cout << "Не удается установить подключение к базе данных." << endl;
         return 1;
      }

      /* Создать транзакционный объект */
      work W(C);

      /* Создать инструкцию SQL */
      sql = "UPDATE MYSTORE set ЦЕНА = 999.99 where МАТЕРИАЛ='Хлопок'";

      /* Выполнить SQL-запрос */
      W.exec( sql );
      W.commit();
      cout << "Записи изменены успешно" << endl;

      /* Создать инструкцию SQL */
      sql = "SELECT * from MYSTORE";

      /* Создать нетранзакционный объект */
      nontransaction N(C);

      /* Выполнить SQL-запрос */
      result R( N.exec( sql ));

      /* Вывести записи */
      for (result::const_iterator c = R.begin(); c != R.end(); ++c) {
         cout << "ID = " << c[0].as<int>() << endl;
         cout << "Тип = " << c[1].as<string>() << endl;
         cout << "Цвет = " << c[2].as<string>() << endl;
         cout << "Материал = " << c[3].as<string>() << endl;
         cout << "Запас = " << c[4].as<int>() << endl;
         cout << "Цена = " << c[5].as<float>() << endl;
         cout << endl;
      }
      cout << "Операция выполнена успешно." << endl;
      C.disconnect ();
   } catch (const std::exception &e) {
      cerr << e.what() << std::endl;
      return 1;
   }

   return 0;
}
Скомпилируйте программу и выполните ее:
Раскрыть type=bash
$ gсс test.cpp -lpqxx -lpq
$ ./a.out
Подключение к базе данных testdb установлено.
Записи обновлены успешно.
ID = 4
Тип = Рубашка
Цвет = Синий
Материал = Шелк
Запас = 400
Цена = 2500

ID = 6
Тип = Свитер
Цвет = Синий
Материал = Шерсть
Запас = 100
Цена = 4000

ID = 7
Тип = Футболка
Цвет = Синий
Материал = Нейлон
Запас = 500
Цена = 1000

ID = 1
Тип = Футболка
Цвет = Синий
Материал = Хлопок
Запас = 500
Цена = 999.99

ID = 2
Тип = Футболка
Цвет = Желтый
Материал = Хлопок
Запас = 500 
Цена = 999.99

ID = 3
Тип = Футболка
Цвет = Красный
Материал = Хлопок
Запас = 500
Цена = 999.99

ID = 5
Тип = Рубашка
Цвет = Белый
Материал = Хлопок
Запас = 600
Цена = 999.99

Операция выполнена успешно.

Операция DELETE

Приведенный ниже код удаляет данные из таблицы MYSTORE с помощью операции DELETE и выводит на экран обновленные записи:
Раскрыть type=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 = <пароль> \
      hostaddr = 127.0.0.1 port = 5433");
      if (C.is_open()) {
         cout << "Подключение к базе данных " << C.dbname() << " установлено." << endl;
      } else {
         cout << "Не удается установить подключение к базе данных." << endl;
         return 1;
      }

      /* Создать транзакционный объект */
      work W(C);

      /* Создать инструкцию SQL */
      sql = "DELETE from MYSTORE where МАТЕРИАЛ != 'Хлопок'";

      /* Выполнить SQL-запрос */
      W.exec( sql );
      W.commit();
      cout << "Записи изменены успешно." << endl;

      /* Создать инструкцию SQL */
      sql = "SELECT * from MYSTORE";

      /* Создать нетранзакционный объект */
      nontransaction N(C);

      /* Выполнить SQL-запрос */
      result R( N.exec( sql ));

      /* Вывести записи */
      for (result::const_iterator c = R.begin(); c != R.end(); ++c) {
         cout << "ID = " << c[0].as<int>() << endl;
         cout << "Тип = " << c[1].as<string>() << endl;
         cout << "Цвет = " << c[2].as<string>() << endl;
         cout << "Материал = " << c[3].as<string>() << endl;
         cout << "Запас = " << c[4].as<int>() << endl;
         cout << "Цена = " << c[5].as<float>() << endl;
         cout << endl;
      }
      cout << "Операция выполнена успешно." << endl;
      C.disconnect ();
   } catch (const std::exception &e) {
      cerr << e.what() << std::endl;
      return 1;
   }

   return 0;
}
Скомпилируйте программу и выполните ее:
Раскрыть type=bash
$ ./delete.out
Подключение к базе данных testdb установлено.
Записи изменены успешно.
ID = 1
Тип = Футболка
Цвет = Синий
Материал = Хлопок
Запас = 500
Цена = 999.99

ID = 2
Тип = Футболка
Цвет = Желтый
Материал = Хлопок
Запас = 500
Цена = 999.99

ID = 3
Тип = Футболка
Цвет = Красный
Материал = Хлопок
Запас = 500
Цена = 999.99

ID = 5
Тип = Рубашка
Цвет = Белый
Материал = Хлопок
Запас = 600
Цена = 999.99

Операция выполнена успешно.
Предыдущий раздел
Подключение и конфигурирование
Следующий раздел
Быстрый старт для Java
Была ли страница полезной?