sql >> Database teknologi >  >> RDS >> MariaDB

Sådan forbindes C++-programmer til MariaDB

I dag annoncerede vi den generelle tilgængelighed af MariaDB Connector/C++. C++ sproget er kendt for dets effektivitet, alsidighed og udvidelsesmuligheder. Faktisk bruges det ofte i industrier som fintech og spil, hvor applikationer kræver forudsigelig samtidighed og latens. Med MariaDB Connector/C++ kan udviklere bruge den nye connector i deres applikationer til naturligt at oprette forbindelse til MariaDB Server på stedet og i skyen på MariaDB SkySQL.

I denne artikel vil jeg introducere dig til MariaDB Connector/C++ med enkle eksempler, der demonstrerer oprette, læse, opdatere og slette (CRUD) interaktioner med data gemt i MariaDB. Mere specifikt vil jeg gå gennem processen med at skabe en C++ konsolapplikation, der giver dig mulighed for at udføre simple operationer til håndtering af opgaver. Men nok snak, lad os komme i gang!

Download og installation

For at bruge MariaDB Connector/C++ skal du have adgang til en forekomst af MariaDB Server. Der er en række forskellige måder, du kan komme i gang med MariaDB på din lokale maskine, på stedet eller endda i skyen.

  1. Download og installer MariaDB Community Server
    1. Direkte
    2. Brug af et Docker-billede
  2. Download og installer MariaDB Enterprise Server 
  3. Implementer med MariaDB SkySQL, den ultimative MariaDB-skydatabase

Når du har konfigureret en MariaDB Server-instans, kan du følge trinene i MariaDB Enterprise-dokumentationen for instruktioner om, hvordan du downloader og installerer MariaDB Connector/C++.

Forberedelse af MariaDB-server

I dette eksempel, før du kan bruge den nye MariaDB C++ connector, skal du have en database og tabel. Brug en klient efter eget valg, opret forbindelse til din MariaDB-databaseinstans og:

1. Opret en ny database og en enkelt tabel, der vil være ansvarlig for lagring af opgaveposterne.

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,  KEY (PRIMARY)); før> 

2. Opret en ny databasebruger, som Connector/C++ vil bruge til at oprette forbindelse til MariaDB.

OPRET BRUGER, HVIS IKKE FINDER app_user@localhost IDENTIFICERET AF 'Password123!';GIV ALLE PRIVILEGIER PÅ todo.* TIL app_user@localhost;

Opretter forbindelse til MariaDB Server

Nu hvor du har oprettet din databaseinstans, skema og bruger, er det tid til at hoppe ind i C++. Det hele starter med at etablere en forbindelse til MariaDB. For at gøre det skal du selvfølgelig have inkluderet MariaDB-connector-header-filerne, specifikt conncpp.hpp, øverst i filen, som du tilføjer din C++-kode til.

#include 

For at etablere en forbindelse, start med at hente en Driver objekt, der derefter kan bruges i kombination med Java Database Connectivity (JDBC) konfigurationsoplysninger til at opnå en Connection objekt.

// Instantiate Driversql::Driver* driver =sql::mariadb::get_driver_instance();// Konfigurer Connectionsql::SQLString url("jdbc:mariadb://localhost:3306/todo");sql::Egenskaber egenskaber({{"bruger", "app_bruger"}, {"adgangskode", "Password123!"}});// Etabler Connectionstd::unique_ptr conn(driver->connect(url, properties) ));

For mere information om MariaDB's Connector/C++'s forbindelsesfunktionalitet skal du sørge for at tjekke vores officielle virksomhedsdokumentation.

Tilføjelse af opgaver

Når du har fået en Connection indsigelse, du er ude til løbene! Ved at bruge conn, fra det forrige afsnit, er du nu i stand til at udføre SQL ved at bruge en forberedt sætning til at indsætte data i MariaDB.

// Opret en ny PreparedStatementstd::unique_ptr stmnt(conn->prepareStatement("insert into tasks (description) values ​​(?)"));// Bind værdier til SQL statementstmnt->setString (1, beskrivelse);// Udfør querystmnt->executeQuery();

Henter opgaver

Ved at bruge en meget lignende tilgang, som i det sidste afsnit, kan du også oprette en Statement objekt for at hente og udskrive alle opgaveposterne i opgavetabellen.

// Opret en ny Statementstd::unique_ptr stmnt(conn->createStatement());// Udfør querysql::ResultSet *res =stmnt->executeQuery("vælg * fra opgaver");// Gå igennem og print resultswhile (res->next()) { std::cout <<"id =" <getInt(1); std::cout <<", description =" <getString(2); std::cout <<", completed =" <getBoolean(3) <<"\n";}

Opdatering af opgaver

Du kan også bruge en PreparedStatement og specificering af parametre (og værdier) for at lokalisere og ændre en eksisterende opgavepost.

// Create a new PreparedStatementstd::unique_ptr stmnt(conn->prepareStatement("update tasks set completed =? where id =?"));// Bind værdier til SQL statementstmnt->setBoolean(1, completed); stmnt->setInt(2, id);// Udfør querystmnt->executeQuery();

Sletning af opgaver

Og du har selvfølgelig også mulighed for at fjerne data fra MariaDB ved at bruge en DELETE SQL sætning med en PreparedStatement , for at målrette mod en bestemt post.

// Opret en ny PreparedStatementstd::unique_ptr stmnt(conn->prepareStatement("delete from tasks where id =?"));// Bind værdier til SQL statementstmnt->setInt(1, id);// Udfør querystmnt->executeQuery();

Bring det hele sammen

Endelig kan du samle alt i ét selvstændigt eksempel ved at kopiere og indsætte koden nedenfor i en ny fil kaldet tasks.cpp . Eksemplet nedenfor kombinerer alle de CRUD-operationer, jeg har gennemgået, til en samling funktioner, der kan udføres fra hoved metode.

#include  #include #include 
// Slet en opgavepost (angivet med id)void deleteTask(std::unique_ptr &conn, int id) { try { // Opret en ny PreparedStatement std::unique_ptr stmnt(conn->prepareStatement("slet fra opgaver hvor id =?")); // Bind værdier til SQL-sætning stmnt->setInt(1, id); // Udfør forespørgsel stmnt->executeQuery(); } catch(sql::SQLException&e){ std::cerr <<"Fejl ved sletning af opgave:" < prepareStatement("opdateringsopgaver sæt fuldført =? hvor id =?")); // Bind værdier til SQL-sætning stmnt->setBoolean(1, gennemført); stmnt->setInt(2, id); // Udfør forespørgsel stmnt->executeQuery(); } catch(sql::SQLException&e){ std::cerr <<"Fejl ved opdatering af opgavestatus:" <prepareStatement("insert into tasks (description) værdier (?)")); // Bind værdier til SQL-sætning stmnt->setString(1, beskrivelse); // Udfør forespørgsel stmnt->executeQuery(); } catch(sql::SQLException&e){ std::cerr <<"Fejl ved indsættelse af ny opgave:" <createStatement()); // Udfør forespørgsel sql::ResultSet *res =stmnt->executeQuery("vælg * fra opgaver"); // Gå igennem og udskriv resultater while (res->next()) { std::cout <<"id =" <getInt(1); std::cout <<", description =" <getString(2); std::cout <<", completed =" <getBoolean(3) <<"\n"; } } catch(sql::SQLException&e){ std::cerr <<"Fejl ved valg af opgaver:" <connect(url, properties)); // Brug argumenter til at bestemme udførelse af næste trin if (!strcmp(argv[1],"showTasks")) { showTasks(conn); } else if (!strcmp(argv[1],"addTask")) { if (argc !=3) { std::cout <<"Ugyldige argumenter"; retur 1; } addTask(conn, argv[2]); } else if (!strcmp(argv[1],"updateTaskStatus")) { if (argc !=4) { std::cout <<"Ugyldige argumenter"; retur 1; } updateTaskStatus(conn, atoi(argv[2]), argv[3]); } else if (!strcmp(argv[1],"deleteTask")) { if (argc !=3) { std::cout <<"Ugyldige argumenter"; retur 1; } deleteTask(conn, atoi(argv[2])); } // Luk forbindelse conn->close(); } catch(sql::SQLException&e){ std::cerr <<"Fejl ved forbindelse til MariaDB-platformen:" < 

Du kan også finde den fulde kilde til denne prøveapplikation her. Kilden til dette C++-eksempel er indeholdt i et lager for en applikation kaldet "TODO", som også inkluderer en web-front-end og flere andre prøveapplikationer til MariaDB-connector-integration, der spænder over et væld af sprog.

Kørsel af applikationen

Inden for et Linux-miljø, efter at du har oprettet tasks.cpp , kan du bygge en eksekverbar fil, kaldet opgaver, ved hjælp af en C++ compiler.

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

Ved at bruge den eksekverbare fil kan du angive forskellige argumentværdier for at teste CRUD-operationerne.

  • Indsættelse af en ny opgavepost ved at angive en værdi til beskrivelse.
./tasks addTask 'En ny opgave'
  • Udskrivning af alle opgaveposter.
./tasks showTasks
  • Opdatering af en opgaveposts fuldførte værdi. Angiv blot værdier for id og gennemført.
./tasks updateTaskStatus 1 1
  • Slet en opgaveregistrering ved at angive en id-værdi.
./tasks deleteOpgave 1

Kun begyndelsen

Forhåbentlig nød du at se, hvor nemt det er at komme i gang med at bruge C++ med MariaDB. Selvom dette er en fantastisk introduktion til C++ programmering med MariaDB, er vi kun begyndt at ridse overfladen af, hvad der er muligt!

Ønsker du at dykke dybere ned i MariaDB Connector/C++? Sørg for at tjekke MariaDB Developer Hub for endnu mere indhold på det nye C++-stik samt mange andre MariaDB-funktioner og -muligheder.

Find MariaDB Connector/C++-virksomhedsdokumentationen.


  1. 2013 MVP Summit:En hurtig gennemgang og et kig frem

  2. Introduktion af agentbaseret databaseovervågning med ClusterControl 1.7

  3. gemme arabisk i SQL-database

  4. hvordan man bruger tns-indgange med macromedia-drivere til Oracle