sql >> Databasteknik >  >> RDS >> MariaDB

Hur man ansluter C++-program till MariaDB

Idag tillkännagav vi den allmänna tillgängligheten för MariaDB Connector/C++. C++-språket är känt för sin effektivitet, mångsidighet och utbyggbarhet. Faktum är att det ofta används i branscher som fintech och spel där applikationer kräver förutsägbar samtidighet och latens. Med MariaDB Connector/C++ kan utvecklare använda den nya anslutningen i sina applikationer för att naturligt ansluta till MariaDB Server i lokaler och i molnet på MariaDB SkySQL.

I den här artikeln kommer jag att presentera dig för MariaDB Connector/C++ med enkla exempel som visar att skapa, läsa, uppdatera och ta bort (CRUD) interaktioner med data lagrade i MariaDB. Mer specifikt kommer jag att gå igenom processen att skapa en C++-konsolapplikation som låter dig utföra enkla operationer för att hantera uppgifter. Men nog snack, låt oss komma igång!

Hämta och installera

För att kunna använda MariaDB Connector/C++ måste du ha tillgång till en instans av MariaDB Server. Det finns en mängd olika sätt du kan komma igång med MariaDB på din lokala dator, på plats eller till och med i molnet.

  1. Ladda ner och installera MariaDB Community Server
    1. Direkt
    2. Använda en Docker-bild
  2. Ladda ned och installera MariaDB Enterprise Server 
  3. Distribuera med MariaDB SkySQL, den ultimata MariaDB-molndatabasen

När du har ställt in en MariaDB Server-instans kan du följa stegen i MariaDB Enterprise-dokumentationen för instruktioner om hur du laddar ner och installerar MariaDB Connector/C++.

Förbereder MariaDB Server

I det här exemplet, innan du kan använda den nya MariaDB C++-anslutningen måste du ha en databas och tabell. Använd en klient som du väljer, anslut till din MariaDB-databasinstans och:

1. Skapa en ny databas och en enda tabell som kommer att ansvara för att lagra uppgiftsposterna.

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); före> 

2. Skapa en ny databasanvändare som Connector/C++ kommer att använda för att ansluta till MariaDB.

SKAPA ANVÄNDARE OM INTE FINNS app_user@localhost IDENTIFIERAD AV 'Password123!'; GE ALLA PRIVILEGIER PÅ att göra.* TILL app_user@localhost;

Ansluter till MariaDB Server

Nu när du har ställt in din databasinstans, schema och användare, är det dags att hoppa in i C++. Det hela börjar med att upprätta en anslutning till MariaDB. Naturligtvis, för att göra det, måste du ha inkluderat MariaDB-anslutningshuvudfilerna, specifikt conncpp.hpp, överst i filen som du lägger till din C++-kod till.

#include 

För att upprätta en anslutning, börja med att hämta en Driver objekt som sedan kan användas, i kombination med Java Database Connectivity (JDBC) konfigurationsinformation, för att erhålla en Connection objekt.

// Instantiate Driversql::Driver* driver =sql::mariadb::get_driver_instance();// Konfigurera Connectionsql::SQLString url("jdbc:mariadb://localhost:3306/todo");sql::Egenskaper egenskaper({{"användare", "app_användare"}, {"lösenord", "Lösenord123!"}});// Etablera Connectionstd::unique_ptr conn(driver->connect(url, egenskaper) ));

För mer information om MariaDB:s Connector/C++s anslutningsfunktion, se till att kolla in vår officiella företagsdokumentation.

Lägga till uppgifter

När du har fått en Connection objekt, du är iväg till tävlingarna! Genom att använda conn, från föregående avsnitt, kan du nu köra SQL genom att använda en förberedd sats för att infoga data i MariaDB.

// Skapa en ny PreparedStatementstd::unique_ptr stmnt(conn->prepareStatement("insert into tasks (description) values ​​(?)"));// Bind värden till SQL-satsstmnt->setString (1, beskrivning);// Kör querystmnt->executeQuery();

Hämta uppgifter

Genom att använda ett mycket liknande tillvägagångssätt, som i det förra avsnittet, kan du också skapa ett Statement objekt för att hämta och skriva ut alla uppgiftsposter i uppgiftstabellen.

// Skapa ett nytt Statementstd::unique_ptr stmnt(conn->createStatement());// Kör querysql::ResultSet *res =stmnt->executeQuery("välj * från uppgifter");// Gå igenom och print resultswhile (res->next()) { std::cout <<"id =" <getInt(1); std::cout <<", description =" <getString(2); std::cout <<", completed =" <getBoolean(3) <<"\n";}

Uppdatera uppgifter

Du kan också använda en PreparedStatement och specificera parametrar (och värden) för att lokalisera och modifiera en befintlig uppgiftspost.

// Skapa en ny PreparedStatementstd::unique_ptr stmnt(conn->prepareStatement("update tasks set completed =? where id =?"));// Bind värden till SQL-satsstmnt->setBoolean(1, completed); stmnt->setInt(2, id);// Kör querystmnt->executeQuery();

Ta bort uppgifter

Och, naturligtvis, har du också möjligheten att ta bort data från MariaDB genom att använda en DELETE SQL uttalande med en PreparedStatement , för att rikta in sig på en specifik post.

// Skapa en ny PreparedStatementstd::unique_ptr stmnt(conn->prepareStatement("radera från uppgifter där id =?"));// Bind värden till SQL-satsstmnt->setInt(1, id);// Kör querystmnt->executeQuery();

Förena allt

Slutligen kan du sätta ihop allt i ett, självständigt exempel genom att kopiera och klistra in koden nedan i en ny fil som heter tasks.cpp . Exemplet nedan kombinerar alla CRUD-operationer jag har gått igenom till en samling funktioner som kan köras från huvud metod.

#include  #include #include 
// Ta bort en uppgiftspost (anges med id)void deleteTask(std::unique_ptr &conn, int id) { try {// Skapa en ny PreparedStatement std::unique_ptr stmnt(conn->prepareStatement("radera från uppgifter där id =?")); // Bind värden till SQL-sats stmnt->setInt(1, id); // Kör fråga stmnt->executeQuery(); } catch(sql::SQLException&e){ std::cerr <<"Fel vid borttagning av uppgift:" < prepareStatement("uppdateringsuppsättningen är klar =? där id =?")); // Bind värden till SQL-sats stmnt->setBoolean(1, avslutad); stmnt->setInt(2, id); // Kör fråga stmnt->executeQuery(); } catch(sql::SQLException&e){ std::cerr <<"Fel vid uppdatering av aktivitetsstatus:" <prepareStatement("insert into tasks (description) värden (?)")); // Bind värden till SQL-sats stmnt->setString(1, beskrivning); // Kör fråga stmnt->executeQuery(); } catch(sql::SQLException&e){ std::cerr <<"Fel vid infogning av ny uppgift:" <createStatement()); // Kör query sql::ResultSet *res =stmnt->executeQuery("välj * från uppgifter"); // Gå igenom och skriv ut resultaten medan (res->next()) { std::cout <<"id =" <getInt(1); std::cout <<", description =" <getString(2); std::cout <<", completed =" <getBoolean(3) <<"\n"; } } catch(sql::SQLException&e){ std::cerr <<"Fel vid val av uppgifter:" <anslut(url, egenskaper)); // Använd argument för att bestämma exekveringen nästa steg if (!strcmp(argv[1],"showTasks")) { showTasks(conn); } else if (!strcmp(argv[1],"addTask")) { if (argc !=3) { std::cout <<"Ogiltiga argument"; retur 1; } addTask(conn, argv[2]); } else if (!strcmp(argv[1],"updateTaskStatus")) { if (argc !=4) { std::cout <<"Ogiltiga argument"; retur 1; } updateTaskStatus(conn, atoi(argv[2]), argv[3]); } else if (!strcmp(argv[1],"deleteTask")) { if (argc !=3) { std::cout <<"Ogiltiga argument"; retur 1; } deleteTask(conn, atoi(argv[2])); } // Stäng anslutning conn->close(); } catch(sql::SQLException&e){ std::cerr <<"Fel vid anslutning till MariaDB-plattformen:" < 

Du kan också hitta hela källan till denna exempelapplikation här. Källan för detta C++-exempel finns i ett arkiv för en applikation som heter "TODO", som också inkluderar ett webbgränssnitt och flera andra exempelapplikationer för MariaDB-anslutningsintegrering som spänner över en mängd språk.

Köra programmet

Inom en Linux-miljö, efter att du har skapat tasks.cpp , kan du bygga en körbar fil, kallad uppgifter, med en C++-kompilator.

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

Med hjälp av den körbara filen kan du ange olika argumentvärden för att testa CRUD-operationerna.

  • Infoga en ny uppgiftspost genom att ange ett värde för beskrivning.
./tasks addTask "En ny uppgift"
  • Skriver ut alla uppgiftsposter.
./tasks showTasks
  • Uppdatering av en uppgiftsposts slutförda värde. Ange helt enkelt värden för id och avslutad.
./tasks updateTaskStatus 1 1
  • Ta bort en uppgiftspost genom att ange ett id-värde.
./tasks deleteTask 1

Bara början

Förhoppningsvis gillade du att se hur lätt det är att komma igång med C++ med MariaDB. Även om detta är en bra introduktion till C++-programmering med MariaDB, har vi bara börjat skrapa på ytan av vad som är möjligt!

Vill du dyka djupare in i MariaDB Connector/C++? Var noga med att kolla in MariaDB Developer Hub för ännu mer innehåll på den nya C++-kontakten samt många andra MariaDB-funktioner och möjligheter.

Hitta MariaDB Connector/C++ företagsdokumentation.


  1. 3 sätt att kontrollera kolumndatatyp i Oracle

  2. Använd tnsnames.ora i Oracle SQL Developer

  3. Kan jag få namn på alla tabeller i SQL Server-databasen i C#-applikationen?

  4. Fix "Kan inte installera i Homebrew på ARM-processor i Intels standardprefix (/usr/local)!"