MariaDB
 sql >> Baza danych >  >> RDS >> MariaDB

Jak podłączyć programy C++ do MariaDB

Dzisiaj ogłosiliśmy ogólną dostępność MariaDB Connector/C++. Język C++ znany jest ze swojej wydajności, wszechstronności i rozszerzalności. W rzeczywistości jest często używany w branżach takich jak fintech i gry, gdzie aplikacje wymagają przewidywalnej współbieżności i opóźnień. Dzięki MariaDB Connector/C++ programiści mogą używać nowego łącznika w swoich aplikacjach do natywnego łączenia się z MariaDB Server lokalnie i w chmurze na MariaDB SkySQL.

W tym artykule przedstawię Ci MariaDB Connector/C++ za pomocą prostych przykładów, które demonstrują interakcje tworzenia, odczytu, aktualizacji i usuwania (CRUD) z danymi przechowywanymi w MariaDB. Dokładniej, zamierzam przejść przez proces tworzenia aplikacji konsolowej w C++, która pozwoli na wykonywanie prostych operacji do zarządzania zadaniami. Ale dość gadania, zacznijmy!

Pobieranie i instalowanie

Aby korzystać z MariaDB Connector/C++, musisz mieć dostęp do instancji MariaDB Server. Istnieje wiele sposobów rozpoczęcia korzystania z MariaDB na komputerze lokalnym, lokalnym, a nawet w chmurze.

  1. Pobierz i zainstaluj serwer społeczności MariaDB
    1. Bezpośrednio
    2. Korzystanie z obrazu Dockera
  2. Pobierz i zainstaluj MariaDB Enterprise Server 
  3. Wdróż za pomocą MariaDB SkySQL, najlepszej bazy danych MariaDB w chmurze

Po skonfigurowaniu instancji MariaDB Server możesz wykonać czynności opisane w dokumentacji MariaDB Enterprise, aby uzyskać instrukcje dotyczące pobierania i instalowania MariaDB Connector/C++.

Przygotowywanie serwera MariaDB

W tym przykładzie, zanim będziesz mógł użyć nowego łącznika MariaDB C++, będziesz potrzebować bazy danych i tabeli. Korzystając z wybranego klienta, połącz się z instancją bazy danych MariaDB i:

1. Utwórz nową bazę danych i pojedynczą tabelę, która będzie odpowiedzialna za przechowywanie rekordów zadań.

CREATE DATABASE IF NOT EXISTS todo;

CREATE TABLE todo.tasks (
  id INT(11) unsigned NOT NULL AUTO_INCREMENT,
  description VARCHAR(500) NOT NULL,
  completed BOOLEAN NOT NULL DEFAULT 0,
  PRIMARY KEY (id)
);

2. Utwórz nowego użytkownika bazy danych, którego Connector/C++ będzie używać do łączenia się z MariaDB.

CREATE USER IF NOT EXISTS app_user@localhost IDENTIFIED BY 
 'Password123!';

GRANT ALL PRIVILEGES ON todo.* TO app_user@localhost;

Łączenie z serwerem MariaDB

Teraz, gdy masz już skonfigurowaną instancję bazy danych, schemat i użytkownika, nadszedł czas, aby przejść do C++. Wszystko zaczyna się od nawiązania połączenia z MariaDB. Oczywiście, aby to zrobić, musisz dołączyć pliki nagłówkowe łącznika MariaDB, w szczególności conncpp.hpp, na górze pliku, do którego dodajesz kod C++.

#include <mariadb/conncpp.hpp>

Aby nawiązać połączenie, zacznij od pobrania Driver obiekt, którego można następnie użyć, w połączeniu z informacjami konfiguracyjnymi Java Database Connectivity (JDBC), w celu uzyskania Connection obiekt.

// Instantiate Driver
sql::Driver* driver = sql::mariadb::get_driver_instance();

// Configure Connection
sql::SQLString url("jdbc:mariadb://localhost:3306/todo");
sql::Properties properties({{"user", "app_user"}, {"password", "Password123!"}});

// Establish Connection
std::unique_ptr<sql::Connection> conn(driver->connect(url, properties));

Aby uzyskać więcej informacji na temat funkcji połączenia MariaDB Connector/C++, zapoznaj się z naszą oficjalną dokumentacją korporacyjną.

Dodawanie zadań

Po uzyskaniu Connection obiekt, ruszasz na wyścigi! Używając conn, z poprzedniej sekcji, możesz teraz wykonać SQL za pomocą przygotowanej instrukcji do wstawienia danych do MariaDB.

// Create a new PreparedStatement
std::unique_ptr<sql::PreparedStatement> stmnt(conn->prepareStatement("insert into tasks (description) values (?)"));

// Bind values to SQL statement
stmnt->setString(1, description);

// Execute query
stmnt->executeQuery();

Pobieranie zadań

Używając bardzo podobnego podejścia, jak w poprzedniej sekcji, możesz również utworzyć Statement obiekt do pobrania i wydrukowania wszystkich rekordów zadań w tabeli zadań.

// Create a new Statement
std::unique_ptr stmnt(conn->createStatement());

// Execute query
sql::ResultSet *res = stmnt->executeQuery("select * from tasks");

// Loop through and print results
while (res->next()) {
       std::cout << "id = " << res->getInt(1);
       std::cout << ", description = " << res->getString(2);
       std::cout << ", completed = " << res->getBoolean(3) << "\n";
}

Aktualizacja zadań

Możesz także użyć PreparedStatement oraz określanie parametrów (i wartości) w celu zlokalizowania i zmodyfikowania istniejącego rekordu zadania.

// Create a new PreparedStatement
std::unique_ptr stmnt(conn->prepareStatement("update tasks set completed = ? where id = ?"));

// Bind values to SQL statement
stmnt->setBoolean(1, completed);
stmnt->setInt(2, id);

// Execute query
stmnt->executeQuery();

Usuwanie zadań

I oczywiście masz również możliwość usuwania danych z MariaDB za pomocą DELETE SQL oświadczenie z PreparedStatement , aby kierować reklamy na konkretny rekord.

// Create a new PreparedStatement
std::unique_ptr stmnt(conn->prepareStatement("delete from tasks where id = ?"));

// Bind values to SQL statement
stmnt->setInt(1, id);

// Execute query
stmnt->executeQuery();

Łączenie wszystkiego w całość

Na koniec możesz złożyć wszystko w jeden, samodzielny przykład, kopiując i wklejając poniższy kod do nowego pliku o nazwie tasks.cpp . Poniższy przykład łączy wszystkie operacje CRUD, przez które przeszedłem, w zbiór funkcji, które można wykonać z głównego metoda.

#include <iostream> 
#include <cstring>
#include <mariadb/conncpp.hpp>

// Delete a task record (indicated by id)
void deleteTask(std::unique_ptr &conn, int id) {
    try {
        // Create a new PreparedStatement
        std::unique_ptr stmnt(conn->prepareStatement("delete from tasks where id = ?"));
        // Bind values to SQL statement
        stmnt->setInt(1, id);
        // Execute query
        stmnt->executeQuery();
    }
    catch(sql::SQLException& e){
      std::cerr << "Error deleting task: " << e.what() << std::endl;
   }
}

// Update the completed value of a task record (indicated by id)
void updateTaskStatus(std::unique_ptr &conn, int id, bool completed) {
    try {
        // Create a new PreparedStatement
        std::unique_ptr stmnt(conn->prepareStatement("update tasks set completed = ? where id = ?"));
        // Bind values to SQL statement
        stmnt->setBoolean(1, completed);
        stmnt->setInt(2, id);
        // Execute query
        stmnt->executeQuery();
    }
    catch(sql::SQLException& e){
      std::cerr << "Error updating task status: " << e.what() << std::endl;
   }
}

// Create a new task record
void addTask(std::unique_ptr &conn, std::string description) {
    try {
        // Create a new PreparedStatement
        std::unique_ptr stmnt(conn->prepareStatement("insert into tasks (description) values (?)"));
        // Bind values to SQL statement
        stmnt->setString(1, description);
        // Execute query
        stmnt->executeQuery();
    }
    catch(sql::SQLException& e){
      std::cerr << "Error inserting new task: " << e.what() << std::endl;
   }
}

// Print all records in tasks table 
void showTasks(std::unique_ptr &conn) {
    try {
        // Create a new Statement
        std::unique_ptr stmnt(conn->createStatement());
        // Execute query
        sql::ResultSet *res = stmnt->executeQuery("select * from tasks");
        // Loop through and print results
        while (res->next()) {
            std::cout << "id = " << res->getInt(1);
            std::cout << ", description = " << res->getString(2);
            std::cout << ", completed = " << res->getBoolean(3) << "\n";
        }
    }
    catch(sql::SQLException& e){
      std::cerr << "Error selecting tasks: " << e.what() << std::endl;
   }
}

// Main Process
int main(int argc, char **argv){
    if (argc==1){
        std::cout << "Please provide an argument.\n";
    }
    else {
        try {
            // Instantiate Driver
            sql::Driver* driver = sql::mariadb::get_driver_instance();

            // Configure Connection
            sql::SQLString url("jdbc:mariadb://localhost:3306/todo");
            sql::Properties properties({{"user", "app_user"}, {"password", "Password123!"}});

            // Establish Connection
            std::unique_ptr conn(driver->connect(url, properties));

            // Use arguments to determine execution next steps
            if (!strcmp(argv[1],"showTasks")) {
                showTasks(conn);
            }
            else if (!strcmp(argv[1],"addTask")) {
                if (argc != 3) {
                    std::cout << "Invalid arguments";
                    return 1;
                }
                addTask(conn, argv[2]);
            }
            else if (!strcmp(argv[1],"updateTaskStatus")) {
                if (argc != 4) {
                    std::cout << "Invalid arguments";
                    return 1;
                }
                updateTaskStatus(conn, atoi(argv[2]), argv[3]);
            }
            else if (!strcmp(argv[1],"deleteTask")) {
                if (argc != 3) {
                    std::cout << "Invalid arguments"; return 1; } deleteTask(conn, atoi(argv[2])); } // Close Connection conn->close();
        }
        catch(sql::SQLException& e){
            std::cerr << "Error Connecting to MariaDB Platform: " << e.what() << std::endl;
            // Exit (Failed)
            return 1;
        }
    }

    // Exit (Success)
    return 0;
}

Pełne źródło tej przykładowej aplikacji można również znaleźć tutaj. Źródło tego przykładu C++ znajduje się w repozytorium aplikacji o nazwie „TODO”, które zawiera również interfejs sieciowy i kilka innych przykładowych aplikacji integrujących konektor MariaDB obejmujących wiele języków.

Uruchamianie aplikacji

W środowisku Linux, po utworzeniu pliku tasks.cpp , możesz zbudować plik wykonywalny, zwany zadaniami, używając kompilatora C++.

$ g++ -o tasks tasks.cpp -std=c++11 -lmariadbcpp

Używając pliku wykonywalnego, możesz podać różne wartości argumentów, aby przetestować operacje CRUD.

  • Wstawianie nowego rekordu zadania poprzez podanie wartości opisu.
./tasks addTask ‘A New Task’
  • Drukowanie wszystkich rekordów zadań.
./tasks showTasks
  • Aktualizowanie wartości ukończonego rekordu zadania. Po prostu podaj wartości dla identyfikatora i uzupełnij.
./tasks updateTaskStatus 1 1
  • Usuń rekord zadania, podając wartość identyfikatora.
./tasks deleteTask 1

Tylko początek

Mamy nadzieję, że podobało Ci się, jak łatwo jest zacząć używać C++ z MariaDB. Chociaż jest to świetne wprowadzenie do programowania w C++ za pomocą MariaDB, dopiero zaczęliśmy zarys tego, co jest możliwe!

Chcesz zagłębić się w MariaDB Connector/C++? Pamiętaj, aby sprawdzić centrum programistów MariaDB, aby uzyskać jeszcze więcej treści na temat nowego łącznika C++, a także wielu innych funkcji i możliwości MariaDB.

Znajdź dokumentację korporacyjną MariaDB Connector/C++.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Odzyskiwanie po awarii dla klastra Galera wdrożonego w chmurze hybrydowej

  2. Wiele opóźnionych urządzeń podrzędnych replikacji do odzyskiwania po awarii przy niskim RTO

  3. Funkcja SUM() w MariaDB

  4. Jak działa MAKETIME() w MariaDB

  5. Jak wykonać odzyskiwanie danych MySQL i MariaDB do określonego momentu za pomocą ClusterControl