Autor Tópico: MySql em C  (Lida 2103 vezes)

Offline Diego_Rocha

  • Usuário Ubuntu
  • *
  • Mensagens: 372
  • Slackware current
    • Ver perfil
MySql em C
« Online: 13 de Maio de 2007, 18:44 »
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

Código: [Selecionar]
#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;
}

Código: [Selecionar]
~# ./mysql
Segmentation fault

aqui o debug do programinha

Código: [Selecionar]
(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

  • Visitante
Re: MySql em C
« Resposta #1 Online: 14 de Maio de 2007, 15:20 »
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).

Offline Diego_Rocha

  • Usuário Ubuntu
  • *
  • Mensagens: 372
  • Slackware current
    • Ver perfil
Re: MySql em C
« Resposta #2 Online: 15 de Maio de 2007, 01:05 »
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;