antiblock
Cyphriun
  • 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
diamwall

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