MySql em C

Iniciado por Diego_Rocha, 13 de Maio de 2007, 18:44

tópico anterior - próximo tópico

Diego_Rocha

Pessoal é o seguinte como estou aprendendo gtkmm e etc, gostaria de fazer um programinha que usasse interface e que usasse banco de dados, ate ai tudo bem então comecei a aprender a programar em c++ com mysql ( usando a api do c), ai fiz varios programinhas que tinha em tutoriais blza, ai tentei fazer um sozinho, compila blza só que na execução da segmentation fault aqui vai o teste


#include <iostream>
#include <mysql/mysql.h>

using namespace std;

#define HOST "localhost"
#define USER ""
#define PASS ""
#define DB "teste"

int main()
{
MYSQL mysql;
mysql_init(&mysql);
if(mysql_query(&mysql, "CREATE DATABASE teste"))
fprintf(stderr, "Falha ao criar Base de Dados;\nErro: %s\n", mysql_error(&mysql));
else{
if(mysql_real_connect(&mysql, HOST, USER, PASS, DB, 0, NULL, 0))
fprintf(stderr, "Erro ao se conectar na Base de Dados;\nErro: %d: %s\n",
mysql_errno(&mysql), mysql_error(&mysql));
else{
printf("Conectado...");
mysql_close(&mysql);
}
}
return 0;
}



~# ./mysql
Segmentation fault


aqui o debug do programinha


(gdb) run
Starting program: /home/diego/mysql

Program received signal SIGSEGV, Segmentation fault.
0x40062c1a in mysql_send_query () from /usr/lib/libmysqlclient.so.15


gostaria de saber o seguinte, eu posso usar o mysql_query() dentro de um if ou tenho q tratar ele antes com alguma função, para criar o banco de dados tentei usar o mysql_create_db(), mas da erro na compilação, ( meu mysql é mysql  Ver 14.12 Distrib 5.0.24a, for slackware-linux-gnu (i486) using  EditLine wrapper), se alguem tiver idéia do que possa ser fico grato t+++

***lembrando que estou com meu mysql funcionando e com o daemon do mysql ativado

Darcamo

Não sei nada de sql ou banco de dados, mas uma coisa pode lhe ajudar.

Roda o programa com o gdb como você fez.
Quando ele der o segmentation fault o gdb vai parar, mas ainda vai estar no programa. Nesse ponto usa o comando "up" do gdb. Ele vai para o frame anterior na pilha (o comando bt mostra onde você está na pilha). Ou seja, vai para a função que chamou a função em que houve o segmentation fault. Se você estiver em uma função que foi você que programou e não uma função interna de alguma biblioteca ótimo: você já sabe onde está dando o segmentation fault. Se ainda estiver em um função de alguma biblioteca usa o comando "up" novamente.

Com isso você vai saber onde exatamente ocorreu o segmentation fault no SEU programa. Muitas vezes só isso basta para saber qual a causa (indexando fora do vetor, usando um ponteiro para algum objeto que ainda não foi criado, etc).

Diego_Rocha

mmmm, Isso do up não sabia não, valeu pela informação, como estou estudando ainda um DB, ainda não escolhi em qual vou tentar me aprofundar, acho que vou ficar o mysql++ já que programo em C++, mais andei vendo o sqlite e o postgresql ambos são bons mais mysql me pareceu mais documentado, o oracle tbm parece ser muito bom mais é surreal baixar 700mb de download para ter o oracle funcionando e tbm exige um computador muito bom coisa que não tenho, mais valeu Darcamo sigo na luta;