Usando MySQL na linguagem C
Este é um artigo que visa demostrar como podemos usar a linguagem C para realizar as ações básicas em um banco de dados MySQL. As ações básicas num banco de dados são: inserção, remoção, alteração e consulta de dados.
Parte 4: Consulta
Para desenvolver um programa de consulta num banco de dados MySQL iremos
introduzir mais quatro funções:
A função seguinte (mysql_fetch_fields) tem como retorno uma estrutura que é um array. Essa estrutura possui alguns dados muito úteis, como o nome da coluna.
A mysql_fetch_row retorna os registros encontrados e como cada registro tem várias colunas o valor char que é retornado é um vetor sendo que cada "posição" corresponde a uma coluna da tabela.
Por fim, a que resta ser explicada (mysql_free_result) serve para limpar a variável de resultado retornado por mysql_store_result.
Vejamos, um exemplo para consultar com as funções citadas.
- unsigned int mysql_num_fields(MYSQL_RES *res);
- MYSQL_FIELD * mysql_fetch_fields(MYSQL_RES *res);
- MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);
- void mysql_free_result(MYSQL_RES *result);
A função seguinte (mysql_fetch_fields) tem como retorno uma estrutura que é um array. Essa estrutura possui alguns dados muito úteis, como o nome da coluna.
A mysql_fetch_row retorna os registros encontrados e como cada registro tem várias colunas o valor char que é retornado é um vetor sendo que cada "posição" corresponde a uma coluna da tabela.
Por fim, a que resta ser explicada (mysql_free_result) serve para limpar a variável de resultado retornado por mysql_store_result.
Vejamos, um exemplo para consultar com as funções citadas.
#include <stdio.h>
#include <mysql/mysql.h>
#define HOST "localhost"
#define USER "guest"
#define PASS "guest"
#define DB "teste"
int main(void)
{
MYSQL conexao;
MYSQL_RES *resp;
MYSQL_ROW linhas;
MYSQL_FIELD *campos;
char query[]="SELECT * FROM aprendendo;";
int conta; //Contador comum
mysql_init(&conexao);
if (mysql_real_connect(&conexao,HOST,USER,PASS,DB,0,NULL,0))
{
printf("Conectado com Sucesso!\n");
if (mysql_query(&conexao,query))
printf("Erro: %s\n",mysql_error(&conexao));
else
{
resp = mysql_store_result(&conexao);//recebe a consulta
if (resp) //se houver consulta
{
//passa os dados dos campos para a variável campos
//escreve na tela os nomes dos campos dando
//um tab somente
campos = mysql_fetch_fields(resp);
for (conta=0;conta<mysql_num_fields(resp);conta++) {
printf("%s",(campos[conta]).name);
if (mysql_num_fields(resp)>1)
printf("\t");
}
printf("\n");
//enquanto retonrnar registros, conta até o
//número de colunas que a tabela tem e escreve na
//tela com um tab, depois pula a linha e tenta
//pegar outro registro
while ((linhas=mysql_fetch_row(resp)) != NULL)
{
for (conta=0;conta<mysql_num_fields(resp);conta++)
printf("%s\t",linhas[conta]);
printf("\n");
}
}
mysql_free_result(resp);//limpa a variável do resultado: resp
}
mysql_close(&conexao);
}
else
{
printf("Conexao Falhou\n");
if (mysql_errno(&conexao))
printf("Erro %d : %s\n", mysql_errno(&conexao), mysql_error(&conexao));
}
return 0;
}
#include <mysql/mysql.h>
#define HOST "localhost"
#define USER "guest"
#define PASS "guest"
#define DB "teste"
int main(void)
{
MYSQL conexao;
MYSQL_RES *resp;
MYSQL_ROW linhas;
MYSQL_FIELD *campos;
char query[]="SELECT * FROM aprendendo;";
int conta; //Contador comum
mysql_init(&conexao);
if (mysql_real_connect(&conexao,HOST,USER,PASS,DB,0,NULL,0))
{
printf("Conectado com Sucesso!\n");
if (mysql_query(&conexao,query))
printf("Erro: %s\n",mysql_error(&conexao));
else
{
resp = mysql_store_result(&conexao);//recebe a consulta
if (resp) //se houver consulta
{
//passa os dados dos campos para a variável campos
//escreve na tela os nomes dos campos dando
//um tab somente
campos = mysql_fetch_fields(resp);
for (conta=0;conta<mysql_num_fields(resp);conta++) {
printf("%s",(campos[conta]).name);
if (mysql_num_fields(resp)>1)
printf("\t");
}
printf("\n");
//enquanto retonrnar registros, conta até o
//número de colunas que a tabela tem e escreve na
//tela com um tab, depois pula a linha e tenta
//pegar outro registro
while ((linhas=mysql_fetch_row(resp)) != NULL)
{
for (conta=0;conta<mysql_num_fields(resp);conta++)
printf("%s\t",linhas[conta]);
printf("\n");
}
}
mysql_free_result(resp);//limpa a variável do resultado: resp
}
mysql_close(&conexao);
}
else
{
printf("Conexao Falhou\n");
if (mysql_errno(&conexao))
printf("Erro %d : %s\n", mysql_errno(&conexao), mysql_error(&conexao));
}
return 0;
}
Nesse programa podemos ver um exemplo que considero básico de consulta. Nele também temos macros para facilitar mudar, por exemplo, o servidor de conexão do MySQL. Execute o programa e você deverá ver algo como:
$ ./a.out
Conectado com Sucesso!
ID nome sexo
1 Ricardo Rodrigues Lucca M
valeus