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.
- Pobierz i zainstaluj serwer społeczności MariaDB
- Bezpośrednio
- Korzystanie z obrazu Dockera
- Pobierz i zainstaluj MariaDB Enterprise Server
- 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++.