antiblock
https://i.imgur.com/aJ17bf7.gif
  • Chatbox

    You don't have permission to chat.
    Load More
Sign in to follow this  
SINVAL o.O

Acesso A Banco De Dados Mysql

1 post in this topic

Olá pessoal...

 

Bom sendo este o meu primeiro post aqui no Include C/C++ e este post se destina a criar uma aplicação que tenha acesso a um banco de dados MySQL. Então vamos lá, agora que vocês já devem ter tudo funcionando 100% após ter lido o post Compilando C/C++ no Linux e no Windows.

Agora então agora é necessário instalar o servidor de banco de dados MySQL. No linux basta digitar apt-get install mysql-server-X.X onde X é a versão. Nós iremos utilizar a 5.0 (mysql-server-5.0). São aproximadamente 36MB. Após baixado e instalado uma senha é requisitada, eu utilizei a famosa senha 123.

Para que se consiga utilizar a biblioteca mysql é necessário baixar a libmysqlclient-dev, também através do apt-get.

Com o serviço instalado vamos criar as tabelas, para isto abra um terminal e digite mysql --user=root -p, então pedirá uma senha, esta senha é do root do MySQL então vamos inserir a senha que você definiu (no meu caso 123) e pronto estamos conectados com o serviço. Vamos então digitar...

create database acessodb;connect acessodb;CREATE TABLE `usuarios` (`id` int(11) NOT NULL AUTO_INCREMENT,`usuario` varchar(20) NOT NULL,PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=5;INSERT INTO `usuarios` (`id`, `usuario`) VALUES(1, 'Mauricio Sipmann'),(2, 'Bolivar Arthur Butzke'),(3, 'Helton Ritter'),(4, 'Michel de Sousa');
Então ta, criamos um banco de dados, criamos a tabela e inserimos uns dados para podermos testar o banco, para sair do serviço basta digitar exit. Agora para conectar

Feito isto vamos para o código-fonte do programa em C++.

#include // Para usar o cin.get#include // mysql/mysql.h biblioteca mysql#include // para usar o istringstreamusing namespace std;int main(void){MYSQL DBCon; // Vairiavel de conexãoMYSQL_RES *result; //variável que recebe o resultadoMYSQL_ROW dados; //variável que recebe os dadosint ID; // Converter para integer// Inicia a variável DBConmysql_init(&DBCon);//Conecta com o banco de dadosif ( mysql_real_connect(&DBCon, "127.0.0.1", "root", "", "acessoaobd", 0, NULL, 0) ){printf("Conectado!nn");}else{//Escreve o erro que ocorreuprintf("Erro n %d : %sn", mysql_errno(&DBCon), mysql_error(&DBCon));cin.get(); //Espera o usuário pressionar uma teclacin.get();return 1;}// Executa a consultaif(mysql_query(&DBCon,"select * from usuarios")){printf("Erro n %d : %sn",mysql_errno(&DBCon),mysql_error(&DBCon));cin.get();cin.get();return 1;}// Recebe os dados da cunsultaresult = mysql_store_result(&DBCon);// Se consultou (sem erros)if (result){// Enquanto receber dados vai escrevendowhile ((dados=mysql_fetch_row(result)) != NULL){// Escreve os dados formatados sende estes a ID e o NOMEistringstream buffer(dados[0]); // Cria a variável que recebera a string a ser convertida para intbuffer >> ID; // Convert a string para intprintf("%02d %sn",ID,dados[1]); // Escreve formatado}// Limpa da memóriamysql_free_result(result);}else{printf("Erro n %d : %sn", mysql_errno(&DBCon), mysql_error(&DBCon));cin.get();cin.get();return 1;}printf("n");// Fecha a conexão ...mysql_close(&DBCon);return 0;}
Então vamos as explicações. As primeiras linhas fazem referência às bibliotecas que iremos utilizar, iostream para as funções cout e cin, mysql.h para acessarmos o banco de dados, e sstream para convertermos as variáveis de string para int. O código quinta linha tem a função de minimizar o trabalho teriamos quando utilizássemos o cin.get ou cout << "texto", teríamos que escrever sempre std::cout << "" com este using namespace STD poupamos trabalho. Então definimos as variáveis DBCon, result, dados e ID, a variável DBCon é a nossa conexão com o banco, result é a variável que armazena o resultado de uma consulta e a variável dados é que receberá os dados de cada linha para escrevermos (veremos mais adiante nas explicações). A função mysql_ini(&DBCon) tem a finalidade de incializar a variável de conexão com o banco pois precisaremos dela diversas vezes como verão. Agora uma parte interessante e que vai do gosto de cada um. Existem 2 funções para se conectar com o banco de dados, são elas:

[*]MYSQL * mysql_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd);

[*]MYSQL * mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned int clientflag);

A diferença é que na mysql_real_connet nós já especificamos o banco ao qual queremos nos conectar, já a mysql_connect só conecta e então seria necessário o uso da função mysql_select_db. Nós usaremos a real_connect, onde são necessários os seguintes parâmetros:

mysql_real_connect(variavel_de_conexao(&DBCon),"servidor(127.0.0.1)","usuario(root)","senha(123)","banco_de_dados(acessodb)",porta_de_conexão(0 para padrão),socket(NULL para padrão), flags_do_cliente(0 para padrão));
Caso ocorra algum erro utilizamos a função printf("Erro n %d: %s",mysql_errno(&DBCon), mysql_error(&DBCon)) onde formatamos para receber um inteiro e uma string, onde mysql_errno traz o numero do erro e mysql_error traz a mensagem de erro, então adicionamos 2 vezes cin.get() e um return 1 para que espere o usuário pressionar qualquer tecla para que finalize o programa.

Então chegamos a parte de execução de uma consulta com o mysql_query(&DBCon,"select * from usuarios"), então esta na cara, variável de conexão e em seguida a nossa SQL de seleção, e também é claro um tratamento de erro.

O pŕoximo passo então é armazenar o resultado completo da consulta em uma variável que é a variável result, result = mysql_store_result(&DBCon), esta função é necessário somente passar a variável de conexão, e como padrão checar se não houve erros durante a seleção. Após tudo isto chegamos na parte em que os dados serão exibidos... para isto é necessário fazer um laço para percorrer todas as linhas que retornaram do banco de dados, por isso o while, onde a variável dados recebe a linha atual, ele se transforma numa array.

É dentro do laço que é feito a conversão do campo ID que é string para int para que assim seja possível formatar o valor retornado com o printf.

istringstream buffer(dados[0]); // Cria a variável e já atribui o valor para ela

buffer >> ID; // Convert a string para int

Portanto o índice 0 da array dados é a ID, então o indece 1 é o campo usuário, e assim segue para cada campo seguinte. A formatação usada no printf %02d é utilizada para que sempre seja impresso numero com 2 casas decimais... EX: 04

Concluindo o código o mysql_free_result limpa da memória a pesquisa e o mysql_close encerra a conexão com o banco de dados. Bom, código feito, é hora de compilar, no linux para compilar (lembrando que este é um código C++) seria:

[*]

[*]g++ -c arquivo.cpp -lmysqlclient

[*]

[*]g++ -o arquivo arquivo.o -lmysqlclient

[*]

Bom... Para que este -lmysqlclient?? Ele é usado para associar a libmysql-cliet-dev que nós baixamos antes ao nosso sistema.

Então esta ai. Espero que tenham gostado. Até a próxima...

 

[*]Fonte : includec.blogspot

[*]Poste Original :  by Mauricio Sipmann

 

Como gostei muito desse tutorial e acho que pode ajudar outras pessoas resolvi partilhar ele aqui, espero que possa ser útil.

Share this post


Link to post
Share on other sites
antiblock
Rodnia | Alpha & Omega

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this