[Ajuda] C e Banco de dados (SQL?)

8 respostas
dmandrak

Oi galera!

Peguei um abacaxi hoje aqui e gostaria de ajuda nessa nova jornada espiritual.

Eu tenho que fazer um programa em Java baseado em Servidor - Cliente que vai acessar um banco de dados que atualmente não existe.

Vou explicar melhor.

Hoje, um programa em C roda em windows e pega de um ambiente linux uma série de variáveis e grava num arquivo .txt a cada 1s.

Ou seja, ele tira uma foto das variáveis do linux.

Mas meu programa em Java que vai rodar precisa de 3minutos de cada variável dessa, ou seja, não dá mais pra ser uma foto.

Então, o que fazer?

Tenho 2 chances, faço a gambiarra do século fazendo uma parte da minha aplicação em java (server por exemplo) pegar os dados do arquivo de texto e inserir num banco sql OU de forma mais inteligente (ou menos lusitana) eu mudo uma parte do código em C pra inserir num banco sql ao invés de fotografar e por num arquivo de texto.

O que vcs acham?

Eu já programei em C mas faz uns 3 anos, atualmente tenho visto um tal de c# :? por ae, mas não sei o que é e nem se a atual aplicação em c++ vai aceitar códigos desse c#

Coloquei no google c, c++, sql, library, insert update delete, e etc mas não achei nenhuma boa referência e como vcs são meus tutores espirituais 24h online :stuck_out_tongue: resolvi vir aqui.

Alguma ajuda?

ps: Lembrando que o programa em C que tira o snapshot está pronto e funcionando lindinho. Ele já lê, reconhece, inverte as palavras (parece que o linus escreve diferente do windows) antes de por no arquivo de texto.

8 Respostas

T

Se você for maluco suficiente de usar C com bancos de dados, veja qual é o banco de dados a ser usado, e veja qual é o modo de se interfacear com esse banco em C. Cada banco é bem diferente um do outro - com Oracle eu usaria Pro*C, com MySQL usaria algumas bibliotecas que o MySQL fornece, com o Derby ou o DB/2 bibliotecas do DB/2, etc.

abelgomes

acho melhor vc arranjar uma maneira de inserir no banco com C mesmo…ou vc pode tentar usar JNI, vi JNI em 2006 achei interessante mas nunca precisei usar…vejo essa necesidade pra vc…entao vc faz a persistencia em java e paga os dados do programa em C :wink:

C# é da microsoft só roda com framework .Net…

espero ter ajudado…

T

Como o programa em C roda em Windows, se seu programa deve falar com qualquer banco que fale ODBC, você pode até tentar, mas aviso que é um pouco “punk” se os tipos de dados não forem bobos (diferentes de string e numeric). Além disso, é bem chatinho trabalhar com ODBC (por exemplo, normalmente você tem de acessar os campos pela sua seqüência.

Digamos que você tem um SELECT A, B, C from D. Você tem de acessar, NESTA ORDEM, os campos A, B e C; se você trocar a ordem vai ter um erro de execução bem feio.

dmandrak

Muito obrigado pela ajuda ae!

Eu acabei tendo outra idéia, de tentar uma abordagem um pouco diferente, talvez até em Java mesmo.

Como são umas 100 variáveis e uns 180 registros de cada uma (1 registro/segundo, 3 minutos = 3 x 60segundos) talvez manter na memória do Java ou fazer um arquivo de texto grande com todos os registros fosse menos custoso.

Com envolve o próprio Java, postei a discussão sobre a eficiência dessas abordagens na parte do fórum relacionada:

http://www.guj.com.br/posts/list/105549.java

MAS essa discussão aqui também está viva.

Não é o mesmo tópico por mais que pareça, :slight_smile: ok?

Ainda aguardo as opiniões e susgestões!

edit:
Thingol always online

Já aconteceu mais de uma vez da gente responder ao mesmo tempo então vou ‘comentar seu comentário’

não entendi :wink:

T

Ah, é que se o programa for feito em C, a maneira padrão de falar com um banco que tenha driver ODBC é usar as bibliotecas de ODBC; mas usar essas bibliotecas é um pouquinho chato, porque você pode ter alguns problemas sutis como esse que eu mostrei.

dmandrak

Sim, a parte do odbc eu entendi.

Não entendi muito bem onde é que entra nesse problema :roll:

Porque no fundo a decisão aqui é como guardar meus dados depois de ‘aquisitados’ e já em ambiente windows.

A leitura do programa em C (que roda em windows) do qual vc está falando já está feita e funcionando lisinha ;), pegando do socket de um servidor Linux.

Entendeu?

ps: eu tenho uma outra aplicação, em outro emprego, em outra área :smiley: , que usa ODBC e é bem pé-no-saco mesmo.

T

Se você tem problemas de desempenho (por exemplo, você não pode gastar tempo gravando-os na hora; pode fazer isso mais tarde) pode simplesmente guardar em uma fila e, de tempos em tempos, gravá-los em um arquivo-texto (que depois será importado para um banco de dados, talvez com “bulk insert”.) Mas isso depende de seu setup.

dmandrak

Então cara, o meu setup é exatamente o que eu tenho que pensar.

Porém, para mim, ele depende disso e não o contrário :wink:

Dêem uma olhada nesse outro tópico que eu postei outras idéias de como resolver esse problema do setup.

http://www.guj.com.br/posts/list/105549.java

Por enquanto o que eu estou “tendendo a preferir” é manter tudo na memória do segundo programa (o servidor em java) e não mexer no código que está em C.

Assim eu evito algumas dores de cabeça.

Não?

Criado 7 de outubro de 2008
Ultima resposta 7 de out. de 2008
Respostas 8
Participantes 3