Banco de Dados com Java

3 respostas
B

Estou começando a usar banco de dados e to usando MySQL, não manjo muito e estou fazendo uns testes pra entender o funcionamento.

Eu possuo uma classe Pessoa:
public class Pessoa {

    private String nome;
    private int idade;
    private int id;
    private ArrayList<Carro> listaCarros = new ArrayList<Carro>();

    public Pessoa(int id, String nome, int idade) {
        this.id = id;
        this.nome = nome;
        this.idade = idade;
    }

Uma pessoa pode ter 1 ou mais carros.

Classe Carro:
public class Carro {

    private String cor;
    private String modelo;
    private int id;

    public Carro(int id, String cor, String modelo) {
        this.cor = cor;
        this.modelo = modelo;
        this.id = id;
    }

Criei uma tabela no banco com a lista de pessoas e seus atributos e fiz o mesmo para o carro.

Como eu poderia identificar que uma pessoa tem tal e tal carros? Se eu nao usasse banco eu usaria essa listadecarro, e iria adicionar os carros la dentro e depois só procurarei. Mas com banco como faz? Eu precisaria relacionar uma tabela com a outra por id? Mas como identifcaria um carro pra mais de uma pessoa? Não sei bem como fazer, to meio perdido. Quando eu quero improtar uma pessoa oque eu faço é instanciar um objeto pessoa e puxar as colunas dos atributos e por no construtor dela.

Já ouvi falar que eu devia dar uma sacada em hibernate, mas comecei a usar BD agora e queria ver o funcionamente disso assim pra mais além estudar o hibernate.

3 Respostas

Andre_Fonseca

oi

vc poderia criar uma tabela de relacionamento pessoa_x_carro contendo apenas os ids, assim, suponha que você tenha uma pessoa = ‘João’ cujo id é 1, e carros = ‘Vectra’ e ‘Astra’ de ids iguais a 1 e 2, a sua tabela de relacionamento seria algo assim

pessoa_x_carro (id_pessoa, id_carro)
registro 1 1
registro 1 2

ai para recuperar os carros da Pessoa = ‘João’

select c.* from carros c join pessoa_x_carros pc on c.id = pc.id_carro join pessoa p on pc.id_pessoa = p.id where p.nome like 'João'

entendeu??

B

Não tenho muito a manhã de SQL, você pode me explicar certinho oque a linha está fazendo?

Tipo, o seu banco também possui apenas 2 tabelas? Ou você cria essa terceira tabela com ids de pessoas e carros? Não tem como eu fazer uma relacao com Foreign Key e não criar essa terceira tabela?

Eu uso esse comando pra puxar os dados:

ResultSet rs = st.executeQuery("SELECT * FROM PESSOA"); while (rs.next()) { String nome = rs.getString("NOME"); int idade = Integer.parseInt(rs.getString("IDADE")); Pessoa p1 = new Pessoa(nome, idade); galera.add(p1); } rs.close(); st.close(); conn.close(); }

Andre_Fonseca

[BlacK:
]Não tenho muito a manhã de SQL, você pode me explicar certinho oque a linha está fazendo?

Tipo, o seu banco também possui apenas 2 tabelas? Ou você cria essa terceira tabela com ids de pessoas e carros? Não tem como eu fazer uma relacao com Foreign Key e não criar essa terceira tabela?

Eu uso esse comando pra puxar os dados:

ResultSet rs = st.executeQuery("SELECT * FROM PESSOA"); while (rs.next()) { String nome = rs.getString("NOME"); int idade = Integer.parseInt(rs.getString("IDADE")); Pessoa p1 = new Pessoa(nome, idade); galera.add(p1); } rs.close(); st.close(); conn.close(); }

Oi

O que o SQL está fazendo é algo parecido com isso:

Seleciona todos os registros da tabela de carros onde os ids de carro estão na tabela de relacionamento e onde os
ids da tabela de relacionamento estão na tabela de pessoa e cujo nome da pessoa é ‘João’

Ou seja, estou fazendo um JOIN entre as tabelas, e no caso só recupero os registros se ambos os lados da relação casarem, o seja, se não encontrar o ID na tabela eu não trago o valor…

A vantagem de você ter uma tabela de relacionamento tem a ver com a normalização do banco

você poderia ter apenas duas tabelas, mas no caso você teria dados duplicados, pois você teria dois registros iguais em pessoa mudando apenas o id_carro

quanto utiliza o Hibernate ele cria a tabela automaticamente para relacionamentos 1xn ou mxn

Criado 13 de maio de 2009
Ultima resposta 13 de mai. de 2009
Respostas 3
Participantes 2