O MySQL é um servidor de banco de dados. Isso significa que ele fica rodando na máquina à espera que uma conexão socket solicite um serviço. Sua API é escrita originalmente em C pela equipe MySQL e depois é transcritas para outras linguagens por outros grupos. É muito comum utilizar o PHP para fazer conexões com o MySQL, mas no meu site a prioridade é C ! #include <mysql/mysql.h> $ make
Farei uma pequena abordagem da libmysql, até porque também é novidade para mim !
» Post Completo...*** mysqlclient ***
mysqlclient é a nossa API que permite conectar no banco de dados do MySQL. Com ela as coisas se tornam transparentes, de forma que, em vez de você precisar criar uma conexão socket da forma tradicional você apenas utiliza as funções mysql_init(...) e mysql_real_connect(...).
No windows você pode programar com o Dev-Cpp bastando instalar o pacote libmysql, que pode ser encontrado no site do devpacks (libmysql).
No Linux, em distribuições Debian, você pode instalar a biblioteca pelo apt (#sudo apt-get install libmysqlclient15-dev) e compilar com o gcc usando o comando: #gcc -o mysql_teste mysql_teste.c `mysql_config --cflags --libs`
*** Algumas funções ***
Confira a lista completa no manual da MySQL.
*** Exemplo ***
A seguir, estão em destaque algumas das principais linhas de um exemplo que faz uma consulta no banco. O código completo está disponível aqui !
#define host "127.0.0.1"
#define user "banco"
#define senha "senha"
#define banco "banco"
MYSQL *sock = NULL;
int main(void){
//--- socket ---//
sock = mysql_init(0);
...
//--- Conexão ---//
mysql_real_connect(sock,host,user,senha,banco,0,NULL,0);
...
consulta();
...
//--- Fechando a conexão ---//
mysql_close(sock);
return 0;
}
void consulta(){
if( mysql_query(sock,"SELECT * FROM `cliente`") ){
printf("falha: %s.",mysql_error(sock));
}else{
//- solicitando resultado da pesquisa
res = mysql_store_result(sock);
if(res){
num_fields = mysql_num_fields(res);
//--- listando dados ---//
while( (row = mysql_fetch_row(res)) ){
lengths = mysql_fetch_lengths(res);
for(i=0; i<num_fields; i++){
printf("%.*s ", (int)lengths[i], row[i]?row[i]:"NULL");
}
printf("\n");
}
mysql_free_result(res);
}else
printf("Erro: %s\n",mysql_error(sock));
}
}
*** Testando ***
gcc -o mysql_teste mysql_teste.c `mysql_config --cflags --libs`
$ ./mysql_teste
socket... ok.
conexao... ok.
codificacao: latin1
status: Uptime: 17988 Threads: 1 Questions: 377 Slow queries: 0 Opens: 136 Flush tables: 1 Open tables: 18 Queries per second avg: 0.021
linhas: 2
[cod] [nome] [dt_cadastro] [tipo_compra] [em_parcelam] [em_vencim]
1, João Pessoa Filho, 2007-10-07, comum, 0.00, 0.00
2, Maria da Conceição Batista, 2007-10-07, comum, 0.00, 0.00
*** Link's ***---
Não foi grande coisa, mas é por aí que as coisas funcionam. Em PHP você faria em quantas linhas ?! Com menos de um terço talvez, mas em momento algum eu estive comparando isso.
Em breve, um outro post sobre como tornar esta aplicação visual. E todo este código em c fará mais sentido !
.:: Menu Rápido ::.
Linux | C/C++ | Downloads | SDL | [×]
Para programar tem que ser Linux ! Para Desktop prefiro o Ubuntu !
A melhor maneira de se descobrir uma lib gratuita é nos repositórios do Ubuntu: $apt-cache search lib <palavra_chave> dev
Ou pelo devpaks.org, mas o repositório tem me ajudado mais !!!
A melhor maneira de se descobrir uma lib gratuita é nos repositórios do Ubuntu: $apt-cache search lib <palavra_chave> dev
Ou pelo devpaks.org, mas o repositório tem me ajudado mais !!!
- Script's GIMP - Python-Fu !!!
- Dicas Web
- Vídeo Compiz Fusion (Desktop 3D)
- Compilando com gcc e Makefile
- Que tal mudar para Ubuntu ?!
C e C++ são minhas linguagens de programação. No começo foi muito difícil, mas agora já estou mais prático (Ainda não é fácil).
- SDL - A Biblioteca dos Jogos 2D
- Analisador léxico de arquivos script
- Simpatizando com a Libxml2
- AsciiGen - Tabela ASCII em C
- Conexão com API C do MySQL
- Compilando com gcc e Makefile
Jogos e programas de minha autoria !
- DR Tetris 0.3 - Tetris no estilo tradicional !
- DR Quebra-Cabeça disponível para download !!!
- Freeggs - Liberdade aos ovos \o/
Se você quer aprender a desenhar... lápis e palel.
Se você quer aprender a programar jogos... SDL !!!
Se você quer aprender a programar jogos... SDL !!!
- Carregando mapas 2D no formato TMX
- Controle de tempo e Frame Rate
- SDL em Processamento de Imagens
- SDL_Surface - Introdução detalhada
- Imprimindo texto com SDL_Ttf
- SDL_Collide - Colisão 2D para jogos
- Tocando música e sons com SDL_mixer
- Gerando e carregando mapas 2D em jogos
- SDL - A Biblioteca dos Jogos 2D
segunda-feira, 8 de outubro de 2007
Conexão com API C do MySQL
O MySQL é um servidor de banco de dados. Isso significa que ele fica rodando na máquina à espera que uma conexão socket solicite um serviço. Sua API é escrita originalmente em C pela equipe MySQL e depois é transcritas para outras linguagens por outros grupos. É muito comum utilizar o PHP para fazer conexões com o MySQL, mas no meu site a prioridade é C !
Farei uma pequena abordagem da libmysql, até porque também é novidade para mim !
» Post Completo...
Assinar:
Postar comentários (Atom)
14 comentários:
Gostei muito importante esse post
nota 20 curto mas preciso, não sei como são as escalas de noas no Brazil por isso é melhor dar 100% ;)
Já agora ORM em C/C++ tens conhecimento?
Tipo Hibernate()
Vlw xiko \o/
xiko disse...
"Já agora ORM em C/C++ tens conhecimento?
Tipo Hibernate()"
Infelizmente eu não sei, mas vou pesquisar sobre o assunto.
Parabens cara!
muito bom isso ai!
Muito bom o Post!
parabéns!
Vlw Maximus !
Não achei seu blog, vc tem algum ?!
Otimo post! está de parabens.
Tambem gostei estava precisando
Um abraço e força
Muito bom o post cara! Só para melhorar ele ainda mais vc deveria colocar a função "void consulta" acima da main, pois nunca vi isso dar certo (pelo menos aqui não deu), e tb tem que declarar as variáveis dessa função, e aí é que tem uma coisa bem interessante que é o fato de algumas delas possuírem tipos definidos para se poder trabalhar com o MySQL. Aí vão as declarações a serem feitas dentro da função "consulta":
MYSQL_RES *res;
int num_fields, i;
MYSQL_ROW row;
unsigned long *lengths;
Adicionando estas linhas dentro da função e colocando a função acima da função principal (main) é só compilar com o comando gcc que vai rodar.
Olá Tony,
Agradeço pela atenção !
Já faz um tempinho que fiz este código, mas acho que ele está funcionando corretamente.
"vc deveria colocar a função "void consulta" acima da main, pois nunca vi isso dar certo"
Realmente não irá dar certo se você escrever uma função abaixo da main() e depois chamá-la. Para resolver este problema nós declaramos todas as funções e só então a implementamos.
void funcao(); // declaração
int main(){
funcao();
}
void funcao(){ // definição
// código
}
Quanto aos tipos definidos, o meio código exibido no blog realmente não tem... e não compila de jeito nenhum, pois ele é só de exemplo. O código funcional é o do link, este deve estar funcionando !
ola amigo, sou novo no C, mas ja tenho alguma experiencia com php... eu ja tinha o dev c++ e ai baixei o pacote do link q vc postou, ate ai tudo certo... baixei tbm o arquivo com o projeto e o banco exportado, coloquei tudo em ordem, abri um projeto em C no Dev e colei o codigo, troquei a senha, usuario e nome do banco, e quando eu vou compilar... nao vai... da um montão de erro... um monte mesmo... sendo q tem uns q parecem q sao erros nos arquivos .h e nao no meu codigo... o q sera q esta havendo? obrigado
Olá Marcus,
Os erros de que você mencionou podem ser dos mais variados tipos... mesmo o código estando correto.
Vou ajudar você a resolvê-los. Por favor mande as mensagens de erro para meu email... diogorbg do gmail.
T++
Fala Diogo tudo bom? Cara estou fazendo um projeto da faculdade de C++, é um programa de controle financeiro pessoal.. feito no C++ Builder com interface gráfica... Cara já criei a interface gráfica e alguns código... Agora estou a duas semanas mais ou menos quebrando a cabeça com o MYSQL... pq o meu programa vai gravar dados do usuario e seus gastos em tabelas no mysql. O Mysql e o C++ Builder estão instalados corretamentes... conexão com o mysql dentro do c++ builder funcionando blz tbm... Ai vem minha dúvida... quando o usuario acessar o sistema fazer seu cadastro e clicar no botão "ok" apartir deste clique não sei que instrução dar no código do botão para ele capturar os dados que o usuario digitou e gravar no mysql... na internet acho muita coisa sobre consulta no mysql agora gravação de dados não encontro quase nada e quando encontro acho o conteudo muito evasivo. Vi que você tem uma grande habilidade com o c e com o mysql... se puder me dar uma forcinha ficarei muito grato. meu email é yuri_matheus@hotmail.com
Grande abraço,
lhe agradeço desde já.
Att Yuri Santana
Pra trabalhar facim com o mySQL você instala o phpMyAdmin. Ele vai te dar uma interface para manipular o banco e ainda vai mostrar os códigos SQL. Um exemplo onde em faço um cadastro:
INSERT INTO `usuario` (`login` ,`senha`,`sexo` ,`dt_cad` ,`dt_aces` )
VALUES (
'diogorbg', '123456', 'M', NOW( ) , NOW( )
);
Você está utilizando o C++ Builder... logo podem haver maneiras de se fazer isso sem precisar gerar o SQL.
Eu posso dar umas dicas de segurança pra você... mas isso vai depender da aplicação. Se for extremamente simples e sem o conceito cliente/servidor nem precisa se preocupar muito.
A gente pode continuar a discussão por e-mail.
T++
Diogo boa noite,
Estou querendo fazer a programação em C++ orientada a objeto para criar um jogo, como posso comunicar a programação com a interface gráfica de meu jogo? Posso utilizar um outro programa gráfico, exemplo 3D Studio Max, autoCad etc. para criar os objetos e depois brincar com a movimentação dos mesmos numa interface comum para C++ e qualquer outro programa?
Preciso de sua ajuda
Obrigada
Eneida
Postar um comentário