Dúvida com Java DB

6 respostas
leandrocm86

Estou desenvolvendo um sistema web usando Mysql como banco (através do jdbc).
Eu li na internet que uma vantagem de se usar o Java DB ao invés de outros bancos como o Mysql é que o banco pode ficar embutido no sistema. Isso é verdade? Eu simplesmente levaria o meu sistema pro servidor sem me importar com o banco de dados que tem lá, porque o banco seria levantado junto com o sistema?

Procurei por bons artigos INTRODUTÓRIOS ensinando como usar o JavaDB, passo a passo, mas não achei nada muito bom… Alguém pode explicar ou dar um orientação?

Obrigado!

6 Respostas

leo_mf

Depende muito do sistema que vc esta desenvolvendo. Eu recomendo usar o mysql. Os bancos java BD são incompletos mas são bem rápidos.

Muitas funções q tem em um mysql ou postgresql não tem em banco java BD.

Dieval_Guizelini

Leandro,

com relação ao seu comentário:

Isso é verdade, funciona sim muito bem, tanto que grandes aplicações como o jboss faz uso desse tipo de banco (o jboss usa o hsqldb).

Existe um problema nesta afirmação, a sua aplicação precisa ter acesso ao disco (onde ficará o banco de dados propriamente dito). Normalmente, mesmo sendo um banco de dados puro java, acaba-se por instalá-lo no servidor e executá-lo como servidor…

Existe outro fato importante, no modo enbarcado (embedded), normalmente o banco irá permitir apenas uma conexão com o banco de dados, e em aplicações para web, normalmente se usa uma conexão para cada thread (para cada requisição).

Vantagens para os DB puro java em aplicações java são enormes, entre elas, pode-se eliminar toda a camada SQL entre outras…
Se quiser mais informações, dê uma olhada nos bancos:
derby ou javadb http://db.apache.org/derby/ ou
Using Java DB in Desktop Applications - http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javadb/
Getting Started - http://java.sun.com/docs/books/tutorial/jdbc/basics/gettingstarted.html

hsqldb - http://www.hsqldb.org/
h2 - http://www.h2database.com/html/main.html
Sleepycat - http://www.oracle.com/corporate/press/2006_feb/sleepycat.html

Com relação ao comentário do leo_mf:

Depende muito do sistema que vc esta desenvolvendo. Eu recomendo usar o mysql. Os bancos java BD são incompletos mas são bem rápidos.
Muitas funções q tem em um mysql ou postgresql não tem em banco java BD.

Eu discordo com relação a completude dos bancos puro java, a questão de completude de um banco ou de outro, acredito que só podem ser mensurados com relação a aderência dos mesmos as especificações do padrão ANSI SQL, neste aspecto, os bancos de dados puro java são muito bons. Superam inclusive o MySQL.

O JavaDB que é na realidade o Apache Derby, teve sua origem no SGBD Cloudscape da IBM e é 100% aderente ao padrão ANSI 99, não sendo ainda compátivel com o SQL 2003. Mas mesmo o Oracle não implementa o padrão ANSI SQL 2003 de forma completa.

Agora, para aplicações em produção, normalmente devemos lembrar que os banco podem ou serão acessados por outros sistemas… tanto que o H2, por exemplo, permite a conexão de aplicações Win32 utilizando o ODBC do postgresql.

No caso do Derby, os drivers do IBM DB2 servem também para acessá-lo.

leandrocm86

Dieval, mas se eu preciso instalar o banco no servidor, então o que significa “embedded” na verdade? Qual a diferença?

Outra coisa: Comecei a criar as tabelas aqui pra testar uma conexão, e fiquei espantado de não achar o tipo BOOLEAN! No mínimo estranho isso heim…

Dieval_Guizelini

Leandro,

Aplicações “embarcadas” fazem sentido para aplicações desktop monousuário e dispositivos móveis…

Com relação ao Boolean, não acho coisa do outro mundo. O Oracle por exemplo não tem. O ANSI 92 não tem também.

Padrão ANSI 92 - http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt

Pelo que pude observar, no ANSI 99 aparece, mas não é obrigatória a implementação e a maior parte dos sgbd implementam através dos user types… na prática, o conceito do C acaba por prevalecer, ou seja, o valor 0 é falso, qualquer coisa diferente de zero é verdadeiro…

ANSI 99 - http://savage.net.au/SQL/sql-99.bnf
ANSI 2003 - http://savage.net.au/SQL/sql-2003-2.bnf.html#data%20type

Data types do derby: http://db.apache.org/derby/docs/10.1/ref/crefsqlj31068.html
ou do javadb http://developers.sun.com/docs/javadb/10.2.2/ref/crefsqlj31068.html
Do Oracle: http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/datatype.htm#i2093
Observe essa parte:

Note:

PL/SQL has additional datatypes for constants and variables, which include BOOLEAN, reference types, composite types (collections and records), and user-defined subtypes.

Aqui a sun diz que no próximo release…

http://docs.sun.com/app/docs/doc/819-3666/genez?a=view

fw

Dieval_Guizelini

Por curiosidade,

veja no mysql:

use mysql; select user from user where 0; select user from user where 1;

fw

leandrocm86

No meu caso então não compensa migrar… O Mysql funciona bem e de qualquer forma eu ia ter que configurar um banco no servidor.
Além disso, eu teria que alterar boa parte do código de persistência pra se adaptar ao Java DB (infelizmente sql não é uma linguagem muito padrão na prática né… rsrs)

Obrigado pelos esclarecimentos!

Criado 24 de outubro de 2008
Ultima resposta 25 de out. de 2008
Respostas 6
Participantes 3