Como conecto os atributos das classes aos respectivos campos das tabelas?

Ja possuo uma classe conexao que usa um driver jdbc para se conectar a um servidor oracle. ja testei a conexao e td ocorre bem.

public class ConexaoBD {
	String user = "naoimporta";
	String pswd = "naoimporta";
	private void conectar(){
		try{
			Class.forName("oracle.jdbc.driver.OracleDriver");  
	        } catch (Exception e) {
	        	System.out.println(e.getMessage());
	        	}
	        try {
	        	Connection conn = DriverManager.getConnection("jdbc:oracle:thin:127.127.127.127:ORCL",user,pswd);
	        	} catch (SQLException ex) {
	        		System.out.print(ex.getMessage());
	        		}
	}
}

agora nao sei como ligar os atributos das classes aos respectivos campos do bd oracle… alguem poderia me explicar como faco exemplificando!??

Obrigado

Coloca a classe ai que possui os atributos que vc deseja fazer a ligação pra ficar + facil pra galera te ajudar amigo ;D

[]'s

segue o codigo da criacao da tabela no oracle e o codigo da classe relacionada…


CREATE TABLE ALUNO (COD VARCHAR2(3) NOT NULL, NOME VARCHAR2(30) NOT NULL, ENDERECO VARCHAR2(50) NOT NULL, CIDADE VARCHAR2(20) NOT NULL, DNASC DATE NOT NULL, ESTADO VARCHAR2(20) NOT NULL, EMAIL VARCHAR2(50), RG VARCHAR2(9) NOT NULL, CPF VARCHAR2(11), PROFISSAO VARCHAR2(20) NOT NULL, TELCOM VARCHAR2(12), TELRES VARCHAR2(12), SEXO CHAR, CONSIDERACOES VARCHAR2(200));
ALTER TABLE ALUNO ADD CONSTRAINT PK_ALUNO PRIMARY KEY (COD);


-------------------


import saude.Saude;
import java.util.Date;


public class Aluno{
	
	private String cod;
	private String cidade;
	private Date dnasc;
	private String endereco;
	private String estado;
	private String nome;
	private String email;
	private String rg;
	private String sexo;
	private String cel;
	private String consideracoes;
	private String cpf;
	private String telRes;
	private String telCom;
	private String profissao;
	private Saude saudeAlu;
        
        //CONSTRUCTOR
        //GETTERS & SETTERS

POR FAVOR, ESTOU REALMENTE PRECISANDO DESCOBRIR COMO SE FAZ O MAPEAMENTO!
SE PUDER DAR EXEMPLO FICA MTO MAIS FACIL…

DESDE JA AGRADECO!!!

ABRACOS A TDS

Então amigo, se o atributo estiver com mesmo nome na classe que está na tabela, não é necessário fazer nada, mas caso o nome na classe esteja diferente da tabela no banco aí vc utiliza a anotação @Column.
Exemplo

@Column (name = "conexao_url") private String conexaoUrl;
Então, conexao_url é como está no banco o nome do atributo.

Espero ter ajudado :wink:

[]'s

tentei fazer com um campo… ficou dessa forma:

@column (name="CONSIDERACOES_GERAIS")
	private String consideracoes;

mas parece que da erro de sintaxe. o erro eh o seguinte:

Multiple markers at this line
- Syntax error, annotations are only available if source level is
1.5
- column cannot be resolved to a type
- The attribute name is undefined for the annotation type
column

eu preciso fazer o import da javax.persistence.*; nao eh?
nao tenho essa biblioteca!!!

Para você fazer isso que eu te expliquei você pricisa mesmoter essa biblioteca.

Você não baixou o Annotation? ;S
Baixa o Annotation e tenta. Qualquer dúvida é so postar aí que eu tento te ajudar. :wink:

Abraço!!!

ola amigo… baixei a biblioteca javax.persistent.*; e sumiu o tal erro! mas nao baixei o annotation… devo baixar mesmo assim!?

tambem… descobri que para cada classe de objeto que se relaciona com o banco, deve haver uma classe VO e uma classe DAO esta correto?!

por exemplo:
(em PHP) http://phpbr.wordpress.com/2007/02/06/abstracao-de-base-de-dados-utilizando-dao/

valeu a força amigo!

De nada. Sempre que eu puder ajudar, pode contar comigo.

Então fera, é verdade sim. Para toda classe que for persistir você precisa de uma classe DAO para a mesma.

Exemplo:

[code]@Entity
public class Produto {
@Id @GeneratedValue
private long id;

private String nome;

@Column(name = "descricao", nullable = true, length = 50)
private String descricao;
private Double preco;


public long getId() {
	return id;
}
public void setId(long id) {
	this.id = id;
}
public String getNome() {
	return nome;
}
public void setNome(String nome) {
	this.nome = nome;
}
public String getDescricao() {
	return descricao;
}
public void setDescricao(String descricao) {
	this.descricao = descricao;
}
public Double getPreco() {
	return preco;
}
public void setPreco(Double preco) {
	this.preco = preco;
}

}[/code]

[code]public class ProdutoDAO {

private Session session;

public ProdutoDAO (Session session) {
	this.session = session;
}

public void salva (Produto p) {
	session.beginTransaction();
	session.save(p);
	session.getTransaction().commit();
	
	
}

public void remove (Produto p ) {
	session.beginTransaction();
	session.delete(p);
	session.getTransaction().commit();
}

public Produto procura (Long id) {
	return (Produto) this.session.load(Produto.class, id);
}

public void atualiza (Produto p){
	session.beginTransaction();
	session.update(p);
	session.getTransaction().commit();
}

public List<Produto> listaTudo(){
	return this.session.createCriteria(Produto.class).list();
}

public List<Produto> pagina (int inicio, int quantia) {
	return this.session.createCriteria(Produto.class).setMaxResults(quantia).setFirstResult(inicio).list();
}

}[/code]

Sacou? :wink:

Abraço!!

Se for usar apenas JDBC: http://www.guj.com.br/java.tutorial.artigo.7.1.guj
Se for usar Hibernate: http://www.guj.com.br/java.tutorial.artigo.174.1.guj
Se ainda quiser, tem o mais novo, JPA.

eu li os tutoriais de como fazer usando somente o JDBC, mas ele e muito basico… as informacoes que o Jarf esta me passando esta sendo de imensa utilidade!

Entao so pra ver se eu entendi…

eu vou ter tres classes… a classe do objeto comum, a classe do objeto persistente (VO), e a classe do objeto de acesso aos dados (DAO) certo?

e como eu uso a classe Statement para fazer comandos sql em meio a este codigo?!
por exemplo… se eu tenho uma classe que eu precise de um comando sql para retornar uma tabela ou coluna que seria mapeado aos atributos da classe, como eu coloco esse comando sql no codigo?!

amigo… se eu estiver abusando me fale, pq eu sou leigo em classes persistentes e vc esta me esclarecendo mta coisa…

obrigado ;D

public Pessoa buscarPorId( int id ) throws SQLException { final String sql = "SELECT NOME, EMAIL FROM PESSOA WHERE ID=?"; Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { conn = getConnection(); ps = conn.prepareStatement(sql); ps.setInt(1,id); rs = ps.executeQuery(); Pessoa p = null; if( rs.next() ) { p = new Pessoa(); p.setNome( rs.getString(1) ); p.setEmail( rs.getString(2) ); } return p; } finally { if( rs!=null ) try { rs.close(); } if( ps!=null ) try { ps.close(); } if( conn=null ) try { conn.close(); } } }

public List&lt;Pessoa&gt; buscarPorNome( String nome ) throws SQLException { final String sql = "SELECT NOME, EMAIL FROM PESSOA WHERE NOME LIKE ?"; Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; List&lt;Pessoa&gt; list = new ArrayList&lt;Pessoa&gt;(); try { conn = getConnection(); ps = conn.prepareStatement(sql); ps.setString(1,nome+"%"); rs = ps.executeQuery(); Pessoa p = null; while( rs.next() ) { p = new Pessoa(); p.setNome( rs.getString(1) ); p.setEmail( rs.getString(2) ); list.add(p); } return list; } finally { if( rs!=null ) try { rs.close(); } if( ps!=null ) try { ps.close(); } if( conn=null ) try { conn.close(); } } }

uma parte da sua duvida o Daniel ja tirou ai, agora quanto as classes que vc perguntou se seriam 3, não são 3 não. São apenas duas, a Classe e a ClasseDAO, onde Classe é a classe normal e a ClasseDAO é a classe que fará a persistencia, como eu coloquei la em cima. :wink:

Não se preocupe não rapaz. Se a sua duvida estiver a altura do pouco que eu sei eu te ajudarei sem problemas. Eu quando estou aprendendo tambem sou assim… relaxa :smiley:
Enquanto eu puder te ajudar eu te ajudo pq tbm tenho pouco tempo de persistencia com Hibernate. Um pouco + de 1 mes e 80% do que sei, eu aprendi com a galera aki. Fui ajudado de boua e sempre que puder ajudarei a quem precisa tbm :wink:

abraço amigo e sempre que precisar, estamos aew!!! :thumbup:

Ola novamente… por enquanto td parece estar dando certo…

TENHO UMA OUTRA DUVIDA!!!
para inserir dados no banco fiz assim…

public void atualizar(AlunoVO aluno) throws SQLException{ this.query="UPDATE ALUNO SET TELCOM = ?, CONSIDERACOES = ?, PROFISSAO = ? WHERE COD =?"; this.stmt=this.con.prepareStatement(query); stmt.setString(1,aluno.getTelCom()); stmt.setString(2,aluno.getConsideracoes()); stmt.setString(3,aluno.getProfissao()); stmt.setString(3,aluno.getCod()); stmt.execute(); stmt.close(); }

Eu gostaria de saber como se faz para retornar um select no console… por exemplo o metodo "buscaID(AlunoVO aluno){…} ???"
nao sei que tipo de dado retornar e nem como vou fazer para retornar… hehehe
O QUE EU FAÇO???

O seu código está beleza.

Não estendi sua dúvida. Explica menlhor!

Eu sei como passar informações do codigo java para o codigo SQL certo!!! Agora preciso como fazer o caminho contrario! como faço um metodo para passar os resultados de uma consulta SQL para um atributo respectivo para que eu possa listar na tela do console!? Obrigado amigo!

Cara, você não viu o meu código de exemplo? Tá ali, feito, prontinho!

nossa é verdade… me desculpe amigo… me passou despercebido… valeu mesmo!

como fica o construtor do DAO?

outra coisa… no exemplo dado de como retornar uma lista de objetos da base de dados, esta sendo usado a classe List que é uma classe visual do java (AWT) certo!? mas eu nao estou trabalhando com classes visuais… estou trabalhando no console! como faço neste caso?!