Acesso ao banco de dados com C++

461 views
Skip to first unread message

Tiago Natel de Moura

unread,
Dec 16, 2009, 4:06:46 PM12/16/09
to ccppbrasil
Olá pessoal !

Não tenho experiência de acesso à bancos de dados com C++ e queria
umas dicas de por onde pesquisar.
Estou desenvolvendo um software e pretendo que ele seja
multiplataforma, portanto escolhi o wxWidgets para a interface gráfica
e está indo muito bem no linux e no windows.
Comecei usando a biblioteca mysql++ e surgiu algumas dúvidas...

É prática na programação em C++ usar algum pattern como o DAO para a
persistencia dos dados?
Se não, como devo proceder?

Vocês recomendam o MySQL com o C++ ? É que já uso mysql há um bom
tempo com Java e PHP....

Obrigado.

Ronaldo Faria Lima

unread,
Dec 17, 2009, 7:21:59 AM12/17/09
to ccppb...@googlegroups.com
Olá, Tiago.

A escolha do banco de dados depende de vários fatores. Entendo que os
mais importantes são o volume de transações e a quantidade de dados
armazenados.

O acesso à banco de dados é um assunto mal resolvido na computação
moderna. Há uma miríade de formas de acessar uma grande diversidade de
bancos de dados. Algumas plataformas resolveram esse problema, como o
JDBC do java ou ADO/ODBC/Jet no Windows.

Via de regra o acesso aos bancos de dados é feito através de
bibliotecas especializadas que dependem dos fabricantes. Como você
pretende desenvolver sua aplicação com independência de plataforma,
sugiro que você também se torne independente do banco de dados,
encapsulando todo o acesso em classes de tal forma que estas façam
interface com as rotinas de acesso do banco de dados de fato. Trocou
de banco de dados, trocam-se as classes, mantendo-se a interface, o
que localiza as mudanças na sua aplicação em uma camada de nível bem
baixo.

Acredito que deva existir alguma biblioteca ou framework que já traga
isso pronto para você, pois esse é um problema recorrente em
programação.

2009/12/16 Tiago Natel de Moura <tiago...@gmail.com>:

> --
> Antes de enviar um e-mail para o grupo leia:
> http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar
> --~--~---------~--~----~------------~-------~--~----~
> C/C++ Brasil - http://www.ccppbrasil.org/
> Para sair dessa lista, envie um e-mail para ccppbrasil-...@googlegroups.com
> Para mais opções, visite http://groups.google.com/group/ccppbrasil
> --~--~---------~--~----~------------~-------~--~----~
> Emprego & carreira:  vag...@ccppbrasil.org
> http://groups.google.com/group/dev-guys?hl=en

Rodrigo (skhaz)

unread,
Dec 17, 2009, 8:11:44 AM12/17/09
to ccppb...@googlegroups.com

Bruno Sanches

unread,
Dec 17, 2009, 8:17:42 AM12/17/09
to ccppb...@googlegroups.com
A propria wx tem um wrapper para acesso a banco de dados:


T+

Bruno Sanches
========================
http://www.pontov.com.br


2009/12/17 Ronaldo Faria Lima <ronaldo.f...@gmail.com>
Olá, Tiago.

Marcio Gil

unread,
Dec 17, 2009, 8:39:10 AM12/17/09
to ccppb...@googlegroups.com
O único problema em se utilizar estes componentes é que, ao que tudo indica, na próxima versão do wxWidgets [1], estes serão removidos. O motivo se encontra em [2] e em [3] eles recomendam utilizar outras bibliotecas de BD. Também tem o site wxCode, com 4 projetos relacionados a banco de dados [4]. Alternativamente, existe e site [5] com inúmeras bibliotecas de acesso a BD. Pessoalmente já testei as bibliotecas OTL e SOCI.
 
 


From: Bruno Sanches

Bruno Sanches

unread,
Dec 17, 2009, 8:50:55 AM12/17/09
to ccppb...@googlegroups.com
Nao sabia que iam remover.

Abracos

Bruno Sanches
========================
http://www.pontov.com.br


2009/12/17 Marcio Gil <marci...@bol.com.br>
--

Ronaldo Faria Lima

unread,
Dec 17, 2009, 8:53:13 AM12/17/09
to ccppb...@googlegroups.com
Muito informativa esta thread. Por ser um "old programmer", eu usava
diretamente OCI ou PRO*C em sistemas unix, via de regra sistemas
legados. Bom saber dessas bibliotecas/frameworks para uso futuro.

2009/12/17 Bruno Sanches <bcsa...@gmail.com>:

Tiago Natel de Moura

unread,
Dec 17, 2009, 8:17:09 AM12/17/09
to ccppb...@googlegroups.com
Eu dei uma olhada numas bibliotecas para fazer a abstração do banco
como DTL, SOCi e DatabaseLayer do próprio wxWidgets mas parecem algo
muito grande para o que eu quero.
Mas vou criar então uma interface para a conexão e comunicação
primeiramente só com MySQL e SQLite, que já conheço bem. Depois, se
for necessário expando isso para outros bds, mas não acho que será
necessário.

@Rodrigo
Já houvi falar muito de Qt, voce saberia me dar um comparativo entre
Qt wxWidgets ? Porque já estou bem familiarizado com wx.
Qt possui uma abstração de banco de dados?

Valeu.

Tiago Natel de Moura
http://blog.tiagomoura-design.com.br

Tiago Natel de Moura

unread,
Dec 17, 2009, 8:26:53 AM12/17/09
to ccppb...@googlegroups.com
Pois é Bruno, já havia dado uma olhada mas parece que foi retirado do
wxWidgets: http://wiki.wxwidgets.org/ODBC
E o wxDBA que eles indicam no link eu não consegui compilar no windows.

2009/12/17 Bruno Sanches <bcsa...@gmail.com>:

--

Rodrigo (skhaz)

unread,
Dec 17, 2009, 10:45:57 AM12/17/09
to ccppb...@googlegroups.com
Então Tiago, certa vez eu tive que escolher entre Qt, Wx e Gtk.
estudei todos, e escolhi a Qt, é um framework completo, bem organizado
e documentado, sugiro que você faça o mesmo.

2009/12/17 Tiago Natel de Moura <tiago...@gmail.com>:

> --
> Antes de enviar um e-mail para o grupo leia:
> http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar
> --~--~---------~--~----~------------~-------~--~----~
> C/C++ Brasil - http://www.ccppbrasil.org/
> Para sair dessa lista, envie um e-mail para ccppbrasil-...@googlegroups.com
> Para mais opções, visite http://groups.google.com/group/ccppbrasil
> --~--~---------~--~----~------------~-------~--~----~
> Emprego & carreira:  vag...@ccppbrasil.org
> http://groups.google.com/group/dev-guys?hl=en

--
http://www.wintermoonframework.org/

Henrique Lobo Weissmann

unread,
Dec 17, 2009, 10:52:41 AM12/17/09
to ccppb...@googlegroups.com
boa pergunta Tiago.

Como iniciante tenho a mesma dúvida. Aproveitando o gancho portanto: existe algo que nos permita em C++ criar aplicações independentes de SGBDs, como por exemplo o ADO da Microsoft ou o JDBC do Java?

Como é?

2009/12/16 Tiago Natel de Moura <tiago...@gmail.com>
--
Antes de enviar um e-mail para o grupo leia:
http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar
--~--~---------~--~----~------------~-------~--~----~
C/C++ Brasil - http://www.ccppbrasil.org/
Para sair dessa lista, envie um e-mail para ccppbrasil-...@googlegroups.com
Para mais opções, visite http://groups.google.com/group/ccppbrasil
--~--~---------~--~----~------------~-------~--~----~
Emprego & carreira:  vag...@ccppbrasil.org
http://groups.google.com/group/dev-guys?hl=en



--
Henrique Lobo Weissmann
(55) 31 9226-0459

Rodrigo (skhaz)

unread,
Dec 17, 2009, 10:58:22 AM12/17/09
to ccppb...@googlegroups.com
2009/12/17 Henrique Lobo Weissmann <lobowe...@gmail.com>:

> boa pergunta Tiago.
> Como iniciante tenho a mesma dúvida. Aproveitando o gancho portanto: existe
> algo que nos permita em C++ criar aplicações independentes de SGBDs, como
> por exemplo o ADO da Microsoft ou o JDBC do Java?
> Como é?

Alguns que me lembro agora:

http://sourceforge.net/apps/trac/litesql/
http://soci.sourceforge.net/

E muitos outros que já foram citados aqui na lista.

--
http://www.wintermoonframework.org/

Emerson de Freitas Barcelos

unread,
Dec 17, 2009, 11:02:09 AM12/17/09
to ccppb...@googlegroups.com
Você pode usar ADO (ou OLEDB diretamente) em C++ no Windows.
Também pode usar jdbc via JNI.
Pode usar ODBC diretamente...
Ou uma das wrappers de CLI de banco de dados existentes por aí...


De: Henrique Lobo Weissmann <lobowe...@gmail.com>
Para: ccppb...@googlegroups.com
Enviadas: Quinta-feira, 17 de Dezembro de 2009 13:52:41
Assunto: Re: [ccppbrasil] Acesso ao banco de dados com C++


Veja quais são os assuntos do momento no Yahoo! + Buscados: Top 10 - Celebridades - Música - Esportes

Marcio Gil

unread,
Dec 17, 2009, 10:56:52 AM12/17/09
to ccppb...@googlegroups.com
Já deu uma olhada no OTL? É simples e composta de um único arquivo:
"otlv4.h".

http://otl.sourceforge.net/

Um teste simples com OTL:

http://cpp.pastebin.com/f68ebbd76

Outro exemplo, utilizando um iterator:

http://cpp.pastebin.com/f74c4d503

Exemplo mais complexo, um terminal iterativo:

http://cpp.pastebin.com/f56cec3f3

(inclui teste de performance)

Espero que seja útil.

Márcio Gil.

Tiago Natel de Moura

unread,
Dec 17, 2009, 11:27:26 AM12/17/09
to ccppb...@googlegroups.com
@Rodrigo (skhaz)
Nossa, isso era tudo que eu não queria ouvir.... hehe Vou dar uma
olhada no Qt então

@Marcio
Vou dar uma olhada nessa OTL tb.

Obrigado a todos, já vi que há muitas alternativas. Problema agora é
eu me decidir rsrs
Pesquisar sobre essas dicas agora.

--

Marcio Gil

unread,
Dec 17, 2009, 11:58:43 AM12/17/09
to ccppb...@googlegroups.com
Como você vai analisar as possibilidades e eu já postei os meus
testes com OTL...

aí vão dois teste com SOCI:
http://cpp.pastebin.com/f71cbfc6a
http://cpp.pastebin.com/f443cf63b

e os meus testes com ODBC puro:
http://cpp.pastebin.com/f744caa64
http://cpp.pastebin.com/f1abb135f
http://cpp.pastebin.com/f1161b2a9

Na época quando fiz estes testes, reparei que o teste com ODBC puro,
apesar de muito mais complexo, tinha um desempenho muito superior
quando se trata de navegação, pois permite acesso aleatório, ao
contrário da maioria das bibliotecas, que ou não suporta ou simula o
acesso aleatório como eu fiz nos testes com OTL e o SOCI. Por esse
motivo eu até cogitei criar minha biblioteca, mas não pude por falta
de tempo.

Márcio Gil.

> -----Original Message-----
> From: Tiago Natel de Moura
>

Tiago Natel de Moura

unread,
Dec 17, 2009, 2:48:19 PM12/17/09
to ccppb...@googlegroups.com
Nossa, muito obrigado Márcio, vou analisar seus testes, grande ajuda mesmoooooo.
Obrigado!!!!

Francisco Ares

unread,
Dec 17, 2009, 9:55:35 PM12/17/09
to ccppb...@googlegroups.com
Tudo o que se relaciona ao mysql anda meio obscuro, uma vez que a
Oracle, que comprou a Sun, que havia comprado o MySQL, agora é a dona
dele e não se sabe das suas intenções.

Para projetos grandes sugiro o postgresql, para projetos menores,
sugiro o sqlite.

Também apóio a sugestão da biblioteca Qt, pois tem suporte para todos
esses SGBD, é multiplataforma, está em franco desenvolvimento, tem
excelentes ferramentas de desenvolvimento próprias e "plugins" tanto
para o Eclipse quanto para o VisualStudio. E é LGPL. Simpatizo muito
com a wxWidgets, mas as vantagens da Qt são bem melhores, na minha
humilde opinião. É interessante notar que o conceito de layout
"elástica" é praticamente idêntico, e a facilidade de se criar estilos
(ou "skins") é muito grande, muito similar ao GTK, e portanto ao
wxGTK. Além disso tudo, a integração com javascript (ECMASCRIPT, como
eles preferem dizer) permite, por exemplo, criar plugins para o seu
aplicativo sem alterar os executáveis primários. Também integra o
"WebKit", que é um renderizador de HTML muito bom, o "Phonon", uma
interface para arquivos multimídia e uma plataforma gráfica que
permite personalizações e animações para os elementos da interface de
usuário.

Abraços
Chico

2009/12/17 Tiago Natel de Moura <tiago...@gmail.com>:

> --
> Antes de enviar um e-mail para o grupo leia:
> http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar
> --~--~---------~--~----~------------~-------~--~----~
> C/C++ Brasil - http://www.ccppbrasil.org/
> Para sair dessa lista, envie um e-mail para ccppbrasil-...@googlegroups.com
> Para mais opções, visite http://groups.google.com/group/ccppbrasil
> --~--~---------~--~----~------------~-------~--~----~
> Emprego & carreira:  vag...@ccppbrasil.org
> http://groups.google.com/group/dev-guys?hl=en

--
"If you have an apple and I have an apple and we exchange apples then
you and I will still each have one apple. But if you have an idea and
I have one idea and we exchange these ideas, then each of us will have
two ideas." - George Bernard Shaw

Ronaldo Faria Lima

unread,
Dec 18, 2009, 5:03:51 AM12/18/09
to ccppb...@googlegroups.com
Olá, Francisco!

A Oracle teve de fazer uma série de concessões para poder concluir a
aquisição da quase falecida Sun. Segundo esta notícia no NYT, a Oracle
manterá o MySQL no modelo que já é hoje, por força da regulação
anti-truste européia.

http://www.nytimes.com/2009/12/15/technology/companies/15oracle.html

Abraços,

Ronaldo

2009/12/18 Francisco Ares <fra...@gmail.com>:

Fausto Falcone

unread,
Dec 17, 2009, 6:14:12 PM12/17/09
to ccppb...@googlegroups.com
Olá,

Tenho usado Qt para acesso a SQLite e Oracle com ótimos resultados em Linux e Windows.

[]s


------- Messaggio originale -------
Da: Tiago Natel de Moura <tiago...@gmail.com>
Reply-to: ccppb...@googlegroups.com
A: ccppbrasil <ccppb...@googlegroups.com>
Oggetto: [ccppbrasil] Acesso ao banco de dados com C++
Data: Wed, 16 Dec 2009 13:06:46 -0800 (PST)
signature.asc

Tiago Natel de Moura

unread,
Dec 18, 2009, 6:32:10 AM12/18/09
to ccppb...@googlegroups.com
É, já me decidi, vou desenvolver com Qt mesmo. Parece ser um projeto
bem maduro e ainda já vou sanar meu problema com o banco de dados.


--

Marcio Gil

unread,
Dec 18, 2009, 7:00:40 AM12/18/09
to ccppb...@googlegroups.com
Uma das maiores vantagens que visualizei no wxWidgets com relação ao
Qt, é que no wx os componentes são nativos, ou seja, é apenas uma
camada para a API. No Qt os componentes são desenhados, tanto que
você pode ter no Windows a aparência do MAC, por exemplo. Por isso
andei cogitando em utilizar o wx quando necessitar de uma interface
mais leve e o Qt quando for preciso mais recursos multimídia. Não
sei se existe grande diferença em desempenho, ainda não pude fazer
testes neste sentido.

É claro que a Qt avança muito mais rapidamente, pois recebe muito
investimento privado (até por ser um produto comercial). Ao
contrário do wxWidgets que, apesar disso, também é bem completo, e
mais conservador.

Basso

unread,
Dec 18, 2009, 1:46:08 PM12/18/09
to ccppbrasil
Já usei a biblioteca SQLAPI (http://www.sqlapi.com/). Não é gratuita,
mas é open source. Acho que vale a pena dar uma estudada.
Reply all
Reply to author
Forward
0 new messages