Banco de Dados

9 respostas
Figuera

Olá, sou ainda novo em java, apesar de ter alguma experiência com C#, tenho algumas (várias) duvidas e queria pedir o auxilio de vocês.

Preciso “traduzir” (De C# para Java) um conjunto de classes de conexão de banco de dados que possibilitem a conexão com vários bancos de dados diferentes (Oracle, SQLServer, Informix, Sybase, IbmDB2, Access, Interbase, PostgreSQL ).

Bom me disseram para usar o hibernate, estudei bastante sobre ele hoje, mas ainda tenho dúvidas: Ele é uma opção viável para um grande sistema? Pelo que eu entendi teria que criar um classe para cada tabela do BD e são muitas.

E mesmo com o hibernate eu ainda tenho que usar os drivers de conexão com cada banco, correto? Se alguém puder me ajudar com esses drivers, já consegui para Oracle e SQLSERVER, mas não sei se esse os que eu peguei (ojdbc6, jtds) são bons; parece que também existe o ODBC para java, é uma opção?

Obrigado.

9 Respostas

M

Bom, o Hibernate é uma ferramenta para mapeamento Objeto-Relacional, ou seja você irá mapear uma classe para uma tabela (se tem muitas, serão muitos mapeamentos e sim muitas classes), e então o hibernate irá automaticamente persistir os novos objetos instânciados, bem como remover, atualizar, com base nas modificações realizadas no objeto. Presumo que os bancos já estejam em produção pelo que disse, se sim, terá que mapear, se não fosse o caso poderia deixar a criação das tabelas e tal, por conta do Hibernate.

Se você deseja continuar utilizando SQL em seu código, Hibernate não é a solução, penso.

Sim, o para utilizar o Hibernate você terá que ter os Drivers JDBC.

Quanto ao ODBC, não tenho muita experiência…

:slight_smile:

recoma

BD usa um modelo relacional;
Java usa um modelo OO;

Seu trabalho é fazer a conversão Relacional -> OO…

O hibernate facilitará a sua vida, pois ele traduz automaticamente a sintaxe SQL dos vários bancos… Então vc não precisará escrever uma versão para o Oracle, outra para o MySql, outra para o SQLServer! (hibernate dialects)

E normalmente cada tabela virará uma classe do seu modelo OO! (O Netbeans gera automaticamente essas classes a partir do BD)

L

Da uma olhada no ibatis tb … acho que ele vai te ajudar no que vc quer …

Jair_Rillo_Junior

Já falaram bastante do Hibernate, então não tem muito a mais para adicionar, apenas que o Hibernate irá mudar totalmente o modo de se trabalhar com banco de dados. Aquela idéia de sair fazendo INSERT, DELETE, UPDATE dá vida com hibernate não existe.

Sobre o seu trabalho de “traduzir” uma classe em C# para Java, depende muito da sua necessidade.
Se for apenas uma classe para fazer a conexão com o banco, então é um processo bem simples.
Você pode criar uma classe única, onde ela lê atributos de um arquivo properties com exemplo e faz a conexão. A unica coisa que você deve fazer é deixar o arquivo properties com os dados do seu banco de dados e o driver JDBC no classpath. Algo do tipo

public Connection getConnection() {
  //Iniciar objeto properties
  Properties props = new Properties();
  //Ler o arquivo properties fisicamente
  props.load(new FileInputStream("database.properties"));
  //Carregar Driver JDBC - busca o driver no arquivo properties
  Class.forName(props.getProperty("driverClass"));
  //Faz a conexao, utilizar dados do arquivo properties
  Connection con = DriverManager.getConnection(props.getProperty("URL"),props.getProperty("Username"),props.getProperty("Password"));
  //Retorna a conexao
  return con;
}

Procure aqui no GUJ mesmo sobre JDBC e sobre Properties, que certamente irá te ajudar

Caso você não use Design Pattern em C#, é obrigatório você estudar o pattern DAO (Data Access Object), para ter um melhor código em Java com relação a banco de dados.

Espero ter ajudado

Figuera

Vamos ver se eu entendi tudo direito, hibernate é uma opção viável, e sim eu terei que criar um classe para cada uma, e pelo que parece existem ferramentas que leêm bancos de dados e criam essas classes para mim, correto?

Quanto ao hibernate traduzir o SQL para todos os bancos, eu ainda tenho uma dúvida, mesmo que não use Strings de conexão tão diferentes como no ADO, eu ainda tenho que ter um driver (e consequentemente uma string do DriverManager) diferente para cada banco de dados, criando assim um arquivo properties ou cfg.xml para cada banco, correto?

Quanto ao DAO, eu realmente preciso estudar sobre, nunca tinha usado antes se alguém tiver o link de um artigo, por favor.

Jair_Rillo_Junior

E ai Figueira, você está no caminho certo.

O hibernate na minha opinião é uma opção viavel sim, principalmente se você vai de fato mapear todas as tabelas em classes Java.
Outra grande vantagem é que você não vai mais precisar fazer INSERT, UPDATE, DELETE no Hibernate, ele irá se preocupar em fazer isso para você :lol:
Mas é claro, é bom dar uma boa estudada nele.

Sobre os drivers, sim, não importa qual sua escolha (JDBC, Hibernate, JDO, JPA, Toplink), você vai precisar dos drivers JDBC.

Se for usar JDBC puro, utilizar um arquivo properties para armazenar as informações de cada conexão é algo viavel.
No Caso do Hibernate, você pode tanto utilizar um arquivo chamado hibernate.properties, ou o hibernate.cfg.xml (eu prefiro a segunda opção).

Sobre DAO, dê uma pesquisada no google que certamente você irá encontrar algo a respeito.

Figuera

Cara, essa OO está me matando, acho que estou pagando o preço por ter pulado a parte teorica da coisa…

Enfim dei uma lida em DAO, muito interessante, mas me embaralhou todo a cabeça, mau sei formular as perguntas, mas aqui vai uma basica:

Bom devo usar Hibernate integrado, tenho como criar um properties ou cfg.xml dinamico? digo que detecte que servidor eu vou usar e mude ele proprio o driver, ou devo criar um código que seleciona o banco e cria o cfg.xml apartir dele?

Figuera

Por favor isso está me complicando a vida,

Tem como eu mapear meu banco de dados (já em execução) pegar as tabelas e colunas e criar as classes, digo tem algum programa que faz isso? Visto que seria não seria viável cria-las manualmente

recoma

O netbeans faz isso:

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

Criado 25 de outubro de 2007
Ultima resposta 26 de out. de 2007
Respostas 9
Participantes 5