MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

Como conectar programas C++ ao MariaDB


Hoje, anunciamos a disponibilidade geral do MariaDB Connector/C++. A linguagem C++ é conhecida por sua eficiência, versatilidade e extensibilidade. Na verdade, é frequentemente usado em setores como fintech e jogos, onde os aplicativos exigem simultaneidade e latência previsíveis. Com o MariaDB Connector/C++, os desenvolvedores podem usar o novo conector em seus aplicativos para se conectar nativamente ao MariaDB Server no local e na nuvem no MariaDB SkySQL.

Neste artigo, apresentarei o MariaDB Connector/C++ com exemplos simples que demonstram interações de criação, leitura, atualização e exclusão (CRUD) com dados armazenados no MariaDB. Mais especificamente, vou percorrer o processo de criação de um aplicativo de console C++ que permitirá que você execute operações simples para gerenciar tarefas. Mas chega de conversa, vamos começar!

Baixando e instalando


Para usar o MariaDB Connector/C++ você precisa ter acesso a uma instância do MariaDB Server. Há várias maneiras de começar a usar o MariaDB em sua máquina local, no local ou até mesmo na nuvem.
  1. Baixe e instale o MariaDB Community Server
    1. Diretamente
    2. Usando uma imagem do Docker
  2. Faça o download e instale o MariaDB Enterprise Server 
  3. Implante com MariaDB SkySQL, o melhor banco de dados em nuvem MariaDB

Depois de configurar uma instância do MariaDB Server, você pode seguir as etapas fornecidas na documentação do MariaDB Enterprise para obter instruções sobre como baixar e instalar o MariaDB Connector/C++.

Preparando o servidor MariaDB


Neste exemplo, antes de poder usar o novo conector MariaDB C++, você precisará ter um banco de dados e uma tabela. Usando um cliente de sua escolha, conecte-se à sua instância de banco de dados MariaDB e:

1. Crie um novo banco de dados e uma tabela única que será responsável por armazenar os registros das tarefas.
CREATE DATABASE IF NOT EXISTS todo;CREATE TABLE todo.tasks (  id INT(11) unsigned NOT NULL AUTO_INCREMENT,  descrição VARCHAR(500) NOT NULL,  completed BOOLEAN NOT NULL DEFAULT 0,  PRIMARY KEY (id)); 
2. Crie um novo usuário de banco de dados que o Connector/C++ usará para se conectar ao MariaDB.
CRIAR USUÁRIO SE NÃO EXISTE app_user@localhost IDENTIFICADO POR 'Password123!';CONCEDER TODOS OS PRIVILÉGIOS EM todo.* TO app_user@localhost;

Conectando ao servidor MariaDB


Agora que você configurou sua instância de banco de dados, esquema e usuário, é hora de pular para C++. Tudo começa estabelecendo uma conexão com o MariaDB. Claro, para fazer isso, você precisa incluir os arquivos de cabeçalho do conector MariaDB, especificamente conncpp.hpp, na parte superior do arquivo ao qual você está adicionando seu código C++.
#include 

Para estabelecer uma conexão, comece recuperando um Driver objeto que pode ser usado, em combinação com as informações de configuração do Java Database Connectivity (JDBC), para obter uma Connection objeto.
// Instanciar Driversql::Driver* driver =sql::mariadb::get_driver_instance();// Configurar Connectionsql::SQLString url("jdbc:mariadb://localhost:3306/todo");sql::Properties properties({{"user", "app_user"}, {"password", "Password123!"}});// Estabelecer Connectionstd::unique_ptr conn(driver->connect(url, properties ));

Para obter mais informações sobre a funcionalidade de conexão do MariaDB Connector/C++, verifique nossa documentação corporativa oficial.

Adicionando tarefas


Depois de obter uma Connection objeto, você está fora das corridas! Usando conn, da seção anterior, agora você pode executar SQL usando uma instrução preparada para inserir dados no MariaDB.
// Cria um novo PreparedStatementstd::unique_ptr stmnt(conn->prepareStatement("insert into tasks (description) values ​​(?)"));// Vincula valores às instruções SQLtmnt->setString (1, descrição);// Execute querystmnt->executeQuery();

Recuperando tarefas


Usando uma abordagem muito semelhante, como na última seção, você também pode criar uma Statement objeto para recuperar e imprimir todos os registros de tarefas na tabela de tarefas.
// Cria um novo Statementstd::unique_ptr stmnt(conn->createStatement());// Executa querysql::ResultSet *res =stmnt->executeQuery("select * from tasks");// Faz um loop e print resultswhile (res->next()) { std::cout <<"id =" <getInt(1); std::cout <<", descrição =" <getString(2); std::cout <<", complete =" <getBoolean(3) <<"\n";}

Atualizando tarefas


Você também pode usar um PreparedStatement e especificando parâmetros (e valores) para localizar e modificar um registro de tarefa existente.
// Cria um novo PreparedStatementstd::unique_ptr stmnt(conn->prepareStatement("update tasks set completed =? where id =?"));// Vincula valores às instruções SQLtmnt->setBoolean(1, completed); stmnt->setInt(2, id);// Execute querystmnt->executeQuery();

Excluindo tarefas


E, claro, você também pode remover dados do MariaDB usando um DELETE SQL instrução com um PreparedStatement , para segmentar um registro específico.
// Cria um novo PreparedStatementstd::unique_ptr stmnt(conn->prepareStatement("delete from tasks where id =?"));// Vincula valores a instruções SQLtmnt->setInt(1, id);// Execute querystmnt->executeQuery();

Reunindo tudo


Finalmente, você pode juntar tudo em um exemplo independente copiando e colando o código abaixo em um novo arquivo chamado tasks.cpp . O exemplo abaixo combina todas as operações CRUD pelas quais passei em uma coleção de funções que podem ser executadas a partir do main método.
#include  #include #include 
// Excluir um registro de tarefa (indicado por id)void deleteTask(std::unique_ptr &conn, int id) { try { // Crie um novo PreparedStatement std::unique_ptr stmnt(conn->prepareStatement("delete from tasks where id =?")); // Vincula valores à instrução SQL stmnt->setInt(1, id); // Executa a consulta stmnt->executeQuery(); } catch(sql::SQLException&e){ std::cerr <<"Erro ao excluir tarefa:" < prepareStatement("update tasks set completed =? where id =?")); // Vincula valores à instrução SQL stmnt->setBoolean(1, completed); stmnt->setInt(2, id); // Executa a consulta stmnt->executeQuery(); } catch(sql::SQLException&e){ std::cerr <<"Erro ao atualizar o status da tarefa:" <prepareStatement("insert into tasks (description) valores (?)")); // Vincula valores à instrução SQL stmnt->setString(1, descrição); // Executa a consulta stmnt->executeQuery(); } catch(sql::SQLException&e){ std::cerr <<"Erro ao inserir nova tarefa:" <createStatement()); // Executa a consulta sql::ResultSet *res =stmnt->executeQuery("select * from tasks"); // Faz um loop e imprime os resultados while (res->next()) { std::cout <<"id =" <getInt(1); std::cout <<", descrição =" <getString(2); std::cout <<", complete =" <getBoolean(3) <<"\n"; } } catch(sql::SQLException&e){ std::cerr <<"Erro ao selecionar tarefas:" <connect(url, properties)); // Usa argumentos para determinar os próximos passos de execução if (!strcmp(argv[1],,"showTasks")) { showTasks(conn); } else if (!strcmp(argv[1], "addTask")) { if (argc !=3) { std::cout <<"Argumentos inválidos"; retorno 1; } addTask(conn, argv[2]); } else if (!strcmp(argv[1],,"updateTaskStatus")) { if (argc !=4) { std::cout <<"Argumentos inválidos"; retorno 1; } updateTaskStatus(conn, atoi(argv[2]), argv[3]); } else if (!strcmp(argv[1],"deleteTask")) { if (argc !=3) { std::cout <<"Argumentos inválidos"; retorno 1; } deleteTask(conn, atoi(argv[2])); } // Fecha a conexão conn->close(); } catch(sql::SQLException&e){ std::cerr <<"Erro ao conectar-se à plataforma MariaDB:" < 
Você também pode encontrar a fonte completa deste aplicativo de exemplo aqui. A fonte para este exemplo C++ está contida em um repositório para um aplicativo chamado “TODO”, que também inclui um front-end da Web e vários outros aplicativos de amostra de integração do conector MariaDB abrangendo várias linguagens.

Executando o aplicativo


Em um ambiente Linux, depois de criar tasks.cpp , você pode construir um arquivo executável, chamado tasks, usando um compilador C++.
$ g++ -o tasks tasks.cpp -std=c++11 -lmariadbcpp

Usando o arquivo executável, você pode fornecer vários valores de argumento para testar as operações CRUD.
  • Inserindo um novo registro de tarefa fornecendo um valor para descrição.
./tasks addTask 'Uma nova tarefa'
  • Imprimindo todos os registros de tarefas.
./tasks showTasks
  • Atualizando o valor concluído de um registro de tarefa. Basta fornecer valores para id e complete.
./tasks updateTaskStatus 1 1
  • Exclua um registro de tarefa fornecendo um valor de id.
./tasks deleteTask 1

Apenas o começo


Espero que você tenha gostado de ver como é fácil começar a usar C++ com MariaDB. Embora esta seja uma ótima introdução à programação C++ com MariaDB, apenas começamos a arranhar a superfície do que é possível!

Procurando se aprofundar no MariaDB Connector/C++? Certifique-se de verificar o MariaDB Developer Hub para obter ainda mais conteúdo sobre o novo conector C++, bem como muitos outros recursos e capacidades do MariaDB.

Encontre a documentação corporativa do MariaDB Connector/C++.