Guia Detalhado para Integrar C/C++ com Banco de Dados MySQL

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>

Tags: C/C++ MySQL Database Connection SQL API C++ Programming

Publicado em 7-9 17:48