Atualmente, praticamente todas as aplicações necessitam persistir dados. Algo que antigamente poderia ser feito com arquivos de textos, hoje o padrão é o uso de um banco de dados. Há várias opções de sistemas de gerenciamento de banco de dados (SGBD), sendo que o que mais se destaca é o MySQL, devido a sua facilidade e natureza aberta. Assim, neste artigo veremos como utilizar o MySQL em uma aplicação C.
MySQL
O MySQL é um sistema de gerenciamento de banco de dados (SGBD) relacional, open source e gratuito. Atualmente pertencente a Oracle, este banco de dados é amplamente utilizado em pequenas aplicações, além de ser a escolha de grandes empresas, como: NASA, HP, Sony, Nokia, Google, entre outras.
Este sucesso vem da sua facilidade de uso e sua natureza multiplataforma, podendo ser utilizado em qualquer sistema operacional. Por isso foi o banco escolhido para ser demonstrado aqui.
Curso MySQL - Desenvolvedor
Conhecer o cursoInstalando o banco de dados
O processo de instalação do banco irá depender do seu sistema operacional. Não importando a plataforma, o instalador dele pode ser baixado em: https://dev.mysql.com/downloads/mysql/. Entretanto recomendo o uso do instalador apenas no Windows.
Caso esteja no MacOS, baixe o banco via Homebrew com o comando abaixo:
brew install mysql
No Linux, em distribuições baseadas no Ubuntu, utilize o comando abaixo:
sudo apt install mysql-server
Já em distribuições baseadas no Red Hat, CentOS, etc, utilize o comando abaixo:
sudo yum install mysql-community-server
No Windows, faça uso do MySQL Installer e selecione a opção Server Only:
Desta forma será instalado apenas o banco de dados.
No MySQL Installer, após a instalação do banco será exibida a tela de configuração dele, nela é importante que a senha do usuário root seja informada:
Salve esta senha porque ela será utilizada posteriormente.
Nas demais plataformas, o usuário é criado sem senha.
Obtendo bibliotecas de conexão
Para que a linguagem C consiga se conectar ao banco de dados, ela necessita utilizar as bibliotecas de conexão do banco. No caso do MySQL, existem bibliotecas diferentes para cada sistema operacional.
No caso do Windows, estas bibliotecas são adicionadas junto do servidor, assim, não é necessário que elas sejam baixadas posteriormente. Mas caso queira fazer uso apenas delas, não é necessário instalar o banco de dados completo. No MySQL Installer, você pode optar pela opção Client only:
Que será utilizado o conector do C++, que pode ser utilizado em aplicações C.
No caso do MacOS, a biblioteca de conexão pode ser instalada com o comando abaixo:
brew install mysql-client
No Linux, via apt, utilize o comando:
sudo apt-get install libmysqlclient
E via Yum, utilize o comando:
yum install mysql-community-libs
Com o banco e as bibliotecas de conexão instaladas, podemos configurar a nossa aplicação C.
Curso C Intermediário
Conhecer o cursoConfigurando o MySQL no projeto
Dependendo da IDE, a configuração do MySQL pode variar, aqui vou fazer uso do Code::Blocks no Windows. Entretanto, a configuração desta IDE é a mesma nos demais sistemas operacionais.
No Code::Blocks, crie um novo projeto do tipo Console Application:
Com o projeto criado, clique com o botão direito do mouse sobre ele e selecione a opção Build options…:
Na tela apresentada, na aba Search directories, em Compiler, informe o caminho da pasta include do conector ou do servidor (no Windows):
Na imagem acima a pasta não se encontra no caminho padrão, este caminho pode variar de acordo com o sistema, geralmente é:
- Windows: C:\Program Files\MySQL\x.xx\include
- MacOS: /usr/local/Cellar/mysql/x.xx/include
- Linux“: /usr/local/mysql/include
Na aba Linker informe o caminho da pasta lib:
Agora na aba Linker settings, no Windows, informe arquivos .lib presentes na pasta lib:
Caso esteja no MacOS, informe os arquivos .dylib e no Linux (qualquer distribuição), informe os arquivos .so.
Não se esqueça de repetir o mesmo procedimento para o Release.
Criando um banco de dados
Com o MySQL instalado e configurado ao projeto, podemos nos conectar ao banco pelo código. Para exemplificar isso, vamos criar um banco de dados:
#include <stdio.h>
#include <mysql.h>
int main(int argc, char **argv)
{
MYSQL *conn = mysql_init(NULL);
if (mysql_real_connect(conn, "localhost", "root", "1234",
NULL, 0, NULL, 0) == NULL)
{
fprintf(stderr, "%s\n", mysql_error(conn));
mysql_close(conn);
exit(1);
}
if (mysql_query(conn, "CREATE DATABASE TWDATA"))
{
fprintf(stderr, "%s\n", mysql_error(conn));
mysql_close(conn);
exit(1);
}
mysql_close(conn);
exit(0);
}
Inicialmente é adicionado o include do MySQL
#include <mysql.h>
Ele que nos fornece todas as funções necessárias para se conectar ao banco e executar os códigos.
Assim, inicialmente o conector do MySQL é iniciado:
MYSQL *conn = mysql_init(NULL);
E nos conectamos ao banco:
if (mysql_real_connect(conn, "localhost", "root", "1234",
NULL, 0, NULL, 0) == NULL)
{
fprintf(stderr, "%s\n", mysql_error(conn));
mysql_close(conn);
exit(1);
}
A função mysql_real_connect, recebe por parâmetro, respectivamente: um objeto MySQL, host, usuário, password, database, porta, socket e flag. Caso ocorra algum problema com a conexão, ela irá retornar NULL
, e neste caso, exibimos a mensagem no console:
fprintf(stderr, "%s\n", mysql_error(conn));
E finalizamos a aplicação
exit(1);
Se não ocorrer nenhum erro, criamos o banco de dados:
if (mysql_query(conn, "CREATE DATABASE TWDATA"))
{
fprintf(stderr, "%s\n", mysql_error(conn));
mysql_close(conn);
exit(1);
}
Note que é utilizada a função mysql_query
, que recebe por parâmetro um objeto MySQL e a query que deve ser executada no banco.
Ao executar o código, se não ocorrer nenhum erro, nenhuma mensagem será exibida:
Podemos verificar a criação do banco no MySQL.
Com a função mysql_query
é possível executar qualquer tipo de query, mas veremos isso no nosso próximo artigo. Até lá.