Programador C# migrando para Java

12 respostas
K

Olá pessoal!

Sou programador C# já tem alguns anos. Domino completamente e não tenho nenhum problema com C#. Sempre conheci o Java mas nunca me interessei em aprender até porque C# sempre supriu todas as minhas necessidades. De um tempo pra cá resolvi de vez que vou aprender também Java e para isso contava com a ajuda de vocês!
Bem, vamos lá:
No C# para fazer uma classe para conectar com o banco o procedimento mais simples é:

  • Criar uma classe de conexão(geralmente as faço singleton)
  • Referenciar o Oracle.DataAccess
  • Pelos padrões OOP, crio as classes que vão representar as tabelas(entidades)
  • Crio classes DAO para interação das entidades com o banco
    … e por aí vai

Baixei o Eclipse e gostaria de saber passo a passo, o que preciso saber para conectar no banco e fazer uma consulta; No C#, seria algo como:

using (OracleConnection cn = new OracleConnection("minha connectionstring"))
{
    using (OracleCommand cmd = new OracleCommand("Select xx from tabela", cn))
    {
          using (OracleDataReader dr = cmd.ExecuteReader())
          {
                MinhaEntidade item = new MinhaEntidade();
                item.Propriedade1 = dr.GetValue(dr.GetOrdinal("Campo1");
          }
    }
}

Como faria isso com o Java? O que é o equivalente de “referência” do C# no Java?

Desde já, obrigado

12 Respostas

x111

Cara, nesse caso você teria que usar o JDBC para popular uma classe.

Em java estamos anos luz a frente disso usando o mapeamento objeto relacional. Sugiro que você de uma olhada em JPA (Java persistence API). Se é para começar, faça do jeito certo.

K

Em C# também tem equivalentes à isso. Queria mesmo era saber por pura didática mesmo. Mas vou dar uma olhada nisso sim. Obrigado!

drsmachado

x@ndy:
Cara, nesse caso você teria que usar o JDBC para popular uma classe.

Em java estamos anos luz a frente disso usando o mapeamento objeto relacional. Sugiro que você de uma olhada em JPA (Java persistence API). Se é para começar, faça do jeito certo.


Mas JDBC não é um jeito certo de fazer?
Aliás, toda a estrutura de qualquer ORM está completamente baseada no JDBC, a questão é que ele automatiza muita coisa.
Assim sendo, para que ele entenda o que os métodos persist, merge, remove e as named queries e jpqls da vida fazem, acho interessante conhecer JDBC.

drsmachado

Sim, o NHibernate é tão bom quanto o Hibernate para o java e o ADO DB é fantástico.

yurifw

eu tb acho que se for pra “aprender direito” o melhor seria aprender JDBC primeiro

x111

drsmachado:
x@ndy:
Cara, nesse caso você teria que usar o JDBC para popular uma classe.

Em java estamos anos luz a frente disso usando o mapeamento objeto relacional. Sugiro que você de uma olhada em JPA (Java persistence API). Se é para começar, faça do jeito certo.


Mas JDBC não é um jeito certo de fazer?
Aliás, toda a estrutura de qualquer ORM está completamente baseada no JDBC, a questão é que ele automatiza muita coisa.
Assim sendo, para que ele entenda o que os métodos persist, merge, remove e as named queries e jpqls da vida fazem, acho interessante conhecer JDBC.

Não é bem assim, JPA não uma automatização do JDBC. São conceitos distintos. Se você trabalha com um modelo de Objetos e precisa persistir você pode usar JPA. JPA não é necessarimente dependente de um banco de dados relacional, tanto que existem implementações para modelos Bigdata

JDBC é serve basicamente para realizar consultas e atualizações em banco de dados relacionais. JPA utiliza JDBC, mas não dependente dele.

Didaticamente, conhecer JDBC é extremamente válido, porém não é algo que exija um grande conhecimento, pricipalmente para quem veio do C#, pois são bem parecidos.

K

Bem, creio que indiferente de usar ORM ou não, no final das contas, de um jeito ou de outro, tudo vai virar uma chamada JDBC, estou certo?
O que ainda não entendi, é qual o equivalente no Java de uma referência no C#? Imagine que eu tenha, digamos, uma biblioteca para gravar um determinado arquivo, digamos um XML, só pra exemplificar. Essa biblioteca, pelo que entendi, seria um arquivo com extensão jar. Como eu adiciono esse jar em meu projeto para usar as funcionalidades dele?

douglaskd
OracleConnection cn = new OracleConnection("minha connectionstring")

===>>

Connection con = DriverManager.getConnection("minha connectionstring");

OracleCommand cmd = new OracleCommand("Select xx from tabela", cn); OracleDataReader dr = cmd.ExecuteReader();

===>>

Statement stm = conn.createStatement(); ResultSet rs = stm.executeQuery("Select xx from tabela");


OracleDataReader dr -> ResultSet rs
dr.GetOrdinal -> rs.getString / rs.getDouble //e outros tipos.

se você quizer previnir sqls injections e outras melhorias, acho melhor utilizar sqlCommand no C#, ou PreparedStatement no Java.

mas hoje em dia é JPA no Java e Entity framework+Linq no C#

douglaskd

kerplunkboy:
Bem, creio que indiferente de usar ORM ou não, no final das contas, de um jeito ou de outro, tudo vai virar uma chamada JDBC, estou certo?
O que ainda não entendi, é qual o equivalente no Java de uma referência no C#? Imagine que eu tenha, digamos, uma biblioteca para gravar um determinado arquivo, digamos um XML, só pra exemplificar. Essa biblioteca, pelo que entendi, seria um arquivo com extensão jar. Como eu adiciono esse jar em meu projeto para usar as funcionalidades dele?

se for no eclipse, menu superior : Project -> properties -> java build path -> Libraries

vá adicionando os Jars, que seriam as Referências do c#.

a maioria das bibliotécas possuem mais de 1 jar, pois distribuem os jars de terceiros que foram usados separadamente, pode ser que quando você for instalar uma biblioteca, alguns jars dependentes você ja possua.

drsmachado

x@ndy:
drsmachado:
x@ndy:
Cara, nesse caso você teria que usar o JDBC para popular uma classe.

Em java estamos anos luz a frente disso usando o mapeamento objeto relacional. Sugiro que você de uma olhada em JPA (Java persistence API). Se é para começar, faça do jeito certo.


Mas JDBC não é um jeito certo de fazer?
Aliás, toda a estrutura de qualquer ORM está completamente baseada no JDBC, a questão é que ele automatiza muita coisa.
Assim sendo, para que ele entenda o que os métodos persist, merge, remove e as named queries e jpqls da vida fazem, acho interessante conhecer JDBC.

Não é bem assim, JPA não uma automatização do JDBC. São conceitos distintos. Se você trabalha com um modelo de Objetos e precisa persistir você pode usar JPA. JPA não é necessarimente dependente de um banco de dados relacional, tanto que existem implementações para modelos Bigdata

JDBC é serve basicamente para realizar consultas e atualizações em banco de dados relacionais. JPA utiliza JDBC, mas não dependente dele.

Didaticamente, conhecer JDBC é extremamente válido, porém não é algo que exija um grande conhecimento, pricipalmente para quem veio do C#, pois são bem parecidos.


O que eu sei e tenho visto cada dia mais é que quem parte direto para um framework tem muitas dificuldades em usar coisas simples.
Da forma que você está colocando, se ele quiser partir para web, deve aprender diretamente JSF 2 + Primefaces. Eu considero isso um erro, afinal de contas, todos os conceitos de “baixo nível” que estão por trás do JSF 2 deveriam ser bem compreendidos para evitar programas mal construídos.

K

Obrigado à todos, acho que agora tenho o caminho das pedras aqui. Mas provavelmente vou perguntar mais. PS: Já uso NHibernate, Primefaces(às vezes só PrimeUI), JQuery e JQueryUI. Além de usar AJAX pra praticamente tudo.

javaflex

Tentando fazer uma equivalência seria:

ADO.NET --> JDBC
NHibernate --> Hibernate
ASP.NET MVC --> Spring MVC ou outro action based
ASP.NET WebForms/Ajax Control Toolkit --> JSF/Primefaces

Eu também desenvolvo em C# e quando fui aprender Java fui direto pra web pois era minha motivação, foi tranquilo, só não quis aprender JSF pois não gosto de component based (assim como o WebForms do .NET). Se você trabalha com ASP.NET MVC vai ser moleza aprender Spring MVC ou algum outro framework web orientado a action, só vai sentir falta do Razor, pois no Java é mais valorizado o uso de JSTL, que não usa linguagem Java, engessando para que o programador não faça besteira, como se fossemos criança ou de um time que não joga unido, ou ainda para “facilitar” o entendimento do designer, como se ele fosse burro pra se adaptar. Já a parte client naturalmente é a mesma coisa, HTML, JavaScript, JQuery, etc, não totalmente com JSF e WebForms que são mundos a parte não valorizando o desenvolvimento com total controle no lado client. Mas JSF infelizmente é muito usado no mercado, então vai depender dos seus objetivos reais.

JPA é como se fosse uma abstração da abstração, muitos usam sem necessidade, pra “se um dia o Hibernate sair de linha” poder mudar pra outro ou pelo fato de ser padrão da Oracle, então por isso é valorizado no mercado, sendo que isso de padrão da Sun/Oracle pra mim não significa nada, do mesmo jeito que eu não uso Entity Framework da Microsoft. Então eu particularmente uso Hibernate diretamente. Em ambos os casos só não se assuste que não tem como mapear de forma programática como no NHibernate, somente por annotations (gambiarra acoplada as entidades) ou o velho XML. Também não tem QueryOver, só os feios Criteria e HQL.

Genericamente este conteúdo é interessante: http://www.caelum.com.br/apostila-java-web/. Outras apostilas: http://www.k19.com.br/downloads/apostilas

Depois experimente um pouco de cada coisa que é cogitada aqui pelo pessoal e tire suas próprias conclusões do que será melhor pro seu objetivo.

Criado 13 de agosto de 2013
Ultima resposta 13 de ago. de 2013
Respostas 12
Participantes 6