Introdução
Este guia aborda a integração de programas C/C++ com o sistema de gerenciamento de banco de dados MySQL. A API do MySQL oferece suporte completo para operações de conexão, consulta e manipulação de dados. A seguir, discutiremos as etapas essenciais para estabelecer essa integração.
Configuração do Ambiente de Desenvolvimento
Antes de iniciar, é necessário ter o MySQL instaldao e as bibliotecas de desenvolvimento disponíveis.
Instalação do MySQL: Baixe e instale o servidor MySQL a partir do site oficial. Durante a instalação, certifique-se de incluir os pacotes de desenvolvimento, como o MySQL Connector/C.
Ambiente no Windows: Após a instalação, os arquivos de cabeçalho e bibliotecas estarão nos diretórios include e lib da pasta de instalação do MySQL. Configure esses caminhos nas propriedades do projeto no Visual Studio.
Ambiente no Linux: Utilize o gerenciador de pacotes para instalar as bibliotecas de desenvolvimento. No Ubuntu, execute:
sudo apt-get install libmysqlclient-dev
Os arquivos de cabeçalho geralmente estão em /usr/include/mysql, e as bibliotecas em caminhos como /usr/lib/x86_64-linux-gnu/.
Inclusão de Bibliotecas no Projeto
Para utilizar a API do MySQL, inclua o cabeçalho correspondente em seu código-fonte:
#include <mysql></mysql>
Ao compilar, especifique os caminhos corretos. No Linux, use opções como -I para diretórios de cabeçalho e -L para bibliotecas, além de -lmysqlclient para vincular a biblioteca.
Estabelecendo Conexão com o Banco de Dados
A conexão é inicializada com a função mysql_init, seguida por mysql_real_connect para estabelecer a comunicação.
MYSQL *conexao = mysql_init(nullptr);
if (!conexao) {
// Tratar erro de inicialização
}
if (mysql_real_connect(conexao, "host", "usuario", "senha", "banco_dados", 0, nullptr, 0) == nullptr) {
// Tratar falha na conexão usando mysql_error(conexao)
}
Os parâmetros incluem endereço do servidor, credenciais e nome do banco de dados.
Execução de Consultas SQL
Utilize mysql_query para enviar comandos SQL. Para recuperar resultados, empregue mysql_store_result (carrega tudo na memória) ou mysql_use_result (processa linha a linha).
if (mysql_query(conexao, "SELECT id, nome FROM usuarios")) {
// Lidar com erro na consulta
}
MYSQL_RES *resultado = mysql_store_result(conexao);
if (!resultado) {
// Verificar falha
}
int campos = mysql_num_fields(resultado);
MYSQL_ROW registro;
while ((registro = mysql_fetch_row(resultado))) {
for (int i = 0; i < campos; ++i) {
// Processar cada campo
}
}
Lembre-se de liberar os recursos com mysql_free_result.
Encerramento da Conexão e Tartamento de Erros
Sempre feche a conexão após o uso com mysql_close. Implemente verificações de retorno em cada chamada da API e utilize mysql_error para mensagens de erro detalhadas.
Exemplo Prático Completo
O código abaixo demonstra uma aplicação C++ que se conecta ao MySQL, executa uma consulta e exibe os resultados.
#include <mysql>
#include <iostream>
#include <cstdlib>
int main() {
MYSQL *link_db;
MYSQL_RES *conjunto;
MYSQL_ROW registro;
link_db = mysql_init(nullptr);
if (!link_db) {
std::cerr << "Falha na inicialização do MySQL" << std::endl;
return 1;
}
const char *servidor = "localhost";
const char *usuario = "admin";
const char *senha = "senha_segura";
const char *banco = "meubanco";
if (mysql_real_connect(link_db, servidor, usuario, senha, banco, 0, nullptr, 0) == nullptr) {
std::cerr << "Erro na conexão: " << mysql_error(link_db) << std::endl;
mysql_close(link_db);
return 1;
}
const char *comando = "SELECT produto, preco FROM produtos WHERE estoque > 0";
if (mysql_query(link_db, comando)) {
std::cerr << "Falha na consulta: " << mysql_error(link_db) << std::endl;
mysql_close(link_db);
return 1;
}
conjunto = mysql_store_result(link_db);
if (!conjunto) {
std::cerr << "Erro ao armazenar resultados: " << mysql_error(link_db) << std::endl;
mysql_close(link_db);
return 1;
}
int num_campos = mysql_num_fields(conjunto);
while ((registro = mysql_fetch_row(conjunto))) {
for (int j = 0; j < num_campos; ++j) {
std::cout << (registro[j] ? registro[j] : "N/A") << "\t";
}
std::cout << std::endl;
}
mysql_free_result(conjunto);
mysql_close(link_db);
return 0;
}</cstdlib></iostream></mysql>