Banco de Dados com agregação

boa tarde galera

to fazendo um projeto da escola

bem simples por sinal

porém estou tendo serias duvidas na parte de relacionamento com o banco de dados

testei os metodos basicos da minha classe (Alterar, excluir…)

estão funcionando porem agora to tendo q fazer alterações nescessarias para a agregação

so q naum to conseguindo se tiver como vcs me ajudarem tanto no meu código quanto por uns links

com explicações claras eu agredeço

abaixo segue o codigo!!!

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Modelo;

/**
 *
 * @author stharley
 */
public class Pessoa {
    private String nome;
    private String telefone;
    private String cpf;
    private int idade;
    private int cod;
    private Endereco endereco;

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getTelefone() {
        return telefone;
    }

    public void setTelefone(String telefone) {
        this.telefone = telefone;
    }

    public String getCpf() {
        return cpf;
    }

    public void setCpf(String cpf) {
        this.cpf = cpf;
    }

    public int getIdade() {
        return idade;
    }

    public void setIdade(int idade) {
        this.idade = idade;
    }

    /**
     * @return the endereco
     */
    public Endereco getEndereco() {
        return endereco;
    }

    /**
     * @param endereco the endereco to set
     */
    public void setEndereco(Endereco endereco) {
        this.endereco = endereco;
    }

    public int getCod() {
        return cod;
    }

    public void setCod(int cod) {
        this.cod = cod;
    }



}

[code]/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */

package Modelo;

import java.util.List;

/**
*

  • @author stharley
    */
    public class Hospede extends Pessoa {
    private int codigo;
    private String nacionalidade;
    private int qtdDia;
    private int quarto;

    public int getQuarto() {
    return quarto;
    }

    public void setQuarto(int quarto) {
    this.quarto = quarto;
    }

    public int getCodigo() {
    return codigo;
    }

    public void setCodigo(int codigo) {
    this.codigo = codigo;
    }

    public String getNacionalidade() {
    return nacionalidade;
    }

    public void setNacionalidade(String nacionalidade) {
    this.nacionalidade = nacionalidade;
    }

    public int getQtdDia() {
    return qtdDia;
    }

    public void setQtdDia(int qtdDia) {
    this.qtdDia = qtdDia;
    }
    }
    [/code]


package Modelo;

/**
 *
 * @author stharley
 */
public class Endereco {
    private String rua;
    private String bairro;
    private String complemento;
    private String cidade;
    private String estado;
    private int cod;
   
    public int getCod() {
        return cod;
    }

    public void setCod(int cod) {
        this.cod = cod;
    }

    public String getRua() {
        return rua;
    }

    public void setRua(String rua) {
        this.rua = rua;
    }

    public String getBairro() {
        return bairro;
    }

    public void setBairro(String bairro) {
        this.bairro = bairro;
    }

    public String getComplemento() {
        return complemento;
    }

    public void setComplemento(String complemento) {
        this.complemento = complemento;
    }

    public String getCidade() {
        return cidade;
    }

    public void setCidade(String cidade) {
        this.cidade = cidade;
    }

    public String getEstado() {
        return estado;
    }

    public void setEstado(String estado) {
        this.estado = estado;
    }

    @Override
    public String toString() {
        return "Endereco{" + "rua=" + rua + "bairro=" + bairro + "complemento=" + complemento + "cidade=" + cidade + "estado=" + estado + '}';
    }

    
}
package Persistencia;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import Modelo.Endereco;

public class EnderecoDAO {
    public static List <Endereco> leTodos(){
        List<Endereco> endereco =
                new ArrayList<Endereco>();
        try{
            Connection con = GerenteDeConexao.criaConexao();
            Statement stm = con.createStatement();
            ResultSet rs = stm.executeQuery("SELECT * FROM Endereco");
            endereco = new ArrayList<Endereco>();
            while(rs.next()){
                    Endereco ende = new Endereco();
                    ende.setCod(rs.getInt("cod_end"));
                    ende.setBairro(rs.getString("bairro_end"));
                    ende.setCidade(rs.getString("cidade_end"));
                    ende.setComplemento(rs.getString("comple_end"));
                    ende.setEstado(rs.getString("estado_end"));
                    ende.setRua(rs.getString("rua_end"));
                    endereco.add(ende);
            }
        }catch (SQLException e){
            System.out.println("Erro ao buscar os dados " + e.getMessage());
        }
        return endereco;
    }

     public static List <Endereco> leUm(int cod){
        List<Endereco> endereco =
                new ArrayList<Endereco>();
        try{
            Connection con = GerenteDeConexao.criaConexao();
            PreparedStatement stm = con.prepareStatement("SELECT * FROM Endereco where cod_end = ?");
            stm.setInt(1, cod);
            ResultSet rs = stm.executeQuery();
            endereco = new ArrayList<Endereco>();
            while(rs.next()){
                    Endereco ende = new Endereco();
                    ende.setCod(rs.getInt("cod_end"));
                    ende.setBairro(rs.getString("bairro_end"));
                    ende.setCidade(rs.getString("cidade_end"));
                    ende.setComplemento(rs.getString("comple_end"));
                    ende.setEstado(rs.getString("estado_end"));
                    ende.setRua(rs.getString("rua_end"));
                    endereco.add(ende);
            }
        }catch (SQLException e){
            System.out.println("Erro ao buscar os dados " + e.getMessage());
        }
        return endereco;
    }



package Persistencia;

import Modelo.Endereco;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import Modelo.Hospede;

public class HospedeDAO {
    public static List <Hospede> leTodos(){
        List<Hospede> hospede =
                new ArrayList<Hospede>();
        try{
            Connection con = GerenteDeConexao.criaConexao();
            Statement stm = con.createStatement();
            ResultSet rs = stm.executeQuery("SELECT * FROM Hospede");
            hospede = new ArrayList<Hospede>();


            while(rs.next()){

                    Hospede hosp = new Hospede();
                    hosp.setCod(rs.getInt("cod_hos"));
                    hosp.setNacionalidade(rs.getString("nacionalidade_hos"));
                    hosp.setNome(rs.getString("nome_hos"));
                    hosp.setCpf(rs.getString("cpf_hos"));
	            hosp.setIdade(rs.getInt("idade_hos"));
                    hosp.setTelefone(rs.getString("telefone_hos"));
                    hosp.setEndereco(
                            EnderecoDAO.leUm(rs.getInt("cod_end")));// ate onde eu entendi aki chamo o metodo da classe EnderecoDAO e ele vai fazer a busca de acordo com o parametro passado q será o codigo do endereco, acho q deu para me entender,... nessa linha ele da erro
                    hospede.add( hosp);
            }


        }catch (SQLException e){
            System.out.println("Erro ao buscar os dados " + e.getMessage());
        }
        return hospede;
    }

     public static List <Hospede> leUm(int busca){
        List <Hospede> hospe =
                new ArrayList <Hospede>();
        try{
            Connection con = GerenteDeConexao.criaConexao();
            PreparedStatement stm = con.prepareStatement("Select * from hospede Where cod_hos = ?");
            stm.setInt(1, busca);
            ResultSet rs = stm.executeQuery();
            while (rs.next()){
               Hospede hospede = new Hospede();
                hospede = new Hospede();
                hospede.setCodigo(rs.getInt("cod_hos"));
                hospede.setNacionalidade(rs.getString("nacionalidade_hos"));
                hospede.setNome(rs.getString("nome_hos"));
                hospede.setCpf(rs.getString("cpf_hos"));
	        hospede.setIdade(rs.getInt("idade_hos"));
                hospede.setTelefone(rs.getString("telefone_hos"));
                    hospe.add(hospede);
                }
        }catch (SQLException e){
            System.out.println("Erro AO Busca Valor no Banco " + e.getMessage());
        }
        return hospe;
    }
public static int grava(Hospede hospede){
        int ret = 0;
        try{
            Connection con = GerenteDeConexao.criaConexao();
            PreparedStatement stm = con.prepareStatement("INSERT INTO "
                    + "Hospede (nome_hos, idade_hos, cpf_hos, telefone_hos, nacionalidade_hos, Quarto_Cod_quar)"
                    + "VALUES (?,?,?,?,?,?)");
            stm.setString(1, hospede.getNome());
            stm.setInt(2, hospede.getIdade());
            stm.setString(3, hospede.getCpf());
            stm.setString(4, hospede.getTelefone());
            stm.setString(5, hospede.getNacionalidade());
            stm.setInt(6, hospede.getQuarto());

            ret = stm.executeUpdate();
            System.out.println("Inserida");

        } catch (SQLException e){
            System.out.println("Erro ao inserir os dados" + e.getMessage());
        }
        return ret;
    }

    public static int Atualizar(Hospede hospede){
        int ret = 0;
        try{
            Connection con = GerenteDeConexao.criaConexao();
            PreparedStatement stm = con.prepareStatement("UPDATE Hospede SET nome_hos = ?, idade_hos = ?, Telefone_hos = ?,"
                    + "cpf_hos = ?,nacionalidade_hos = ? "
                    + "WHERE cod_hos = ?");

            stm.setString(1, hospede.getNome());
            stm.setInt(2, hospede.getIdade());
            stm.setString(3, hospede.getTelefone());
            stm.setString(4, hospede.getCpf());
            stm.setString(5, hospede.getNacionalidade());
            stm.setInt(6, hospede.getCod());

            ret = stm.executeUpdate();
            System.out.println("Dados Atualizados com Sucessos");


        } catch (SQLException e){
                System.out.println("Erro Ao Atualizar Dados " + e.getMessage());
        }
        return ret;
    }

    public static int deleta(int cod){
        int ret = 0;
        try{
            Connection con = GerenteDeConexao.criaConexao();
            PreparedStatement stm = con.prepareStatement("DELETE FROM Hospede WHERE Cod_hos = ?");
            stm.setInt(1, cod);
            ret = stm.executeUpdate();
            System.out.println("Campo Deletado com sucesso!");
        } catch(SQLException e){
            System.out.println("Erro ao Deletar Campo " + e.getMessage());
        }
        return ret;
    }



}

galera se tiver como vcs pelo menos me explicarem como funciona

o banco com agregação ja me ajudaria bastante ou me passar alguns topicos e tutoriais

me ajudaria bastente

eté onde eu entendi

tenho o endereco q é a minha agregação (PESSOA tem ENDERECO)

o Prof. me disse q teria q ter uma tabela tanto para o HOSPEDE (herda os dados de pessoa) o q é lógico ,

e para o ENDERECO q foi onde complicou minha vida toda…

quando fosse buscar na classe HospedeDAO nele eu buscaria tambem pelo endereço

atravez dos campos em comum (chave estrangeira) nas duas tabelas e é ai q eu parei…

na teoria é facil porem na pratica naum to dando conta

se tiverem como vcs me explicarem como varei isso agredeco

//esse método é  o q eu uso para buscar todos os meus hospedes cadastrados no meu banco
public static List <Hospede> leTodos(){
        List<Hospede> hospede =
                new ArrayList<Hospede>();
        try{
            Connection con = GerenteDeConexao.criaConexao();
            Statement stm = con.createStatement();
            ResultSet rs = stm.executeQuery("SELECT * FROM Hospede");
            hospede = new ArrayList<Hospede>();


            while(rs.next()){

                    Hospede hosp = new Hospede();
                    hosp.setCod(rs.getInt("cod_hos"));
                    hosp.setNacionalidade(rs.getString("nacionalidade_hos"));
                    hosp.setNome(rs.getString("nome_hos"));
                    hosp.setCpf(rs.getString("cpf_hos"));
	            hosp.setIdade(rs.getInt("idade_hos"));
                    hosp.setTelefone(rs.getString("telefone_hos"));
                    hosp.setEndereco(
                            EnderecoDAO.leUm(rs.getInt("cod_end")));// aki é onde chamo o metodo do enderecoDAO q vai buscar o o endereco relativo ao hospede pela chave codigo passado;
                    hospede.add( hosp);
            }


        }catch (SQLException e){
            System.out.println("Erro ao buscar os dados " + e.getMessage());
        }
        return hospede;
    }

//esse é o metodo chamado no metodo mostrado acima public static List <Endereco> leUm(int cod){ List<Endereco> endereco = new ArrayList<Endereco>(); try{ Connection con = GerenteDeConexao.criaConexao(); PreparedStatement stm = con.prepareStatement("SELECT * FROM Endereco where cod_end = ?"); stm.setInt(1, cod); ResultSet rs = stm.executeQuery(); endereco = new ArrayList<Endereco>(); while(rs.next()){ Endereco ende = new Endereco(); ende.setCod(rs.getInt("cod_end")); ende.setBairro(rs.getString("bairro_end")); ende.setCidade(rs.getString("cidade_end")); ende.setComplemento(rs.getString("comple_end")); ende.setEstado(rs.getString("estado_end")); ende.setRua(rs.getString("rua_end")); endereco.add(ende); } }catch (SQLException e){ System.out.println("Erro ao buscar os dados " + e.getMessage()); } return endereco; }

Bom, basicamente, começa assim.
Quantos endereços uma pessoa pode ter? 1, 2, 10, 1000? E, para cada endereço (rua, nº, cidade, estado, país), quantas pessoas podem existir lá? 0, 1, 20, 4000?
Segundo, qual a regra que você pretende seguir, a lógica ou uma restrita. Numa lógica, o relacionamento entre pessoa e endereço é vários para vários (N : M). Neste caso, o banco precisa ter a tabela pessoa, a tabela endereço e uma que as associe. Como pessoa terá uma chave primária, PK e endereco também, a tabela de relacionamento (pessoa_endereco) poderá ter apenas duas colunas, pessoa_id e endereco_id.
Se você pretende que cada pessoa tenha apenas um endereço, então, só crie uma chave estrangeira (FK) em endereço, referenciando a chave primária de pessoa.

galera consegui fazer a consulta com a agregação

ta blz

so q agora to tendo dificuldade em um relacionamento n:m;

ta me apresentando o seguinte erro

Erro de SQL: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'a.Hospede_Cod_hos = 2' at line 1

ja testei a consulta no mysql e ele me retorno os valores q eu quero

so q quando executo ele me retorna esses erros ai

public static List<Bagagista> leTodosPorHospede(int codigo) { List<Bagagista> bagagistas = new ArrayList<Bagagista>(); try { Connection cn = GerenteDeConexao.criaConexao(); PreparedStatement pstm = cn.prepareStatement( "SELECT * FROM bagagista b INNER JOIN " + "alocacao a ON b.cod_bag = a.Bagagista_Cod_bag" + "WHERE a.Hospede_Cod_hos = ?"); pstm.setInt(1, codigo); ResultSet rs = pstm.executeQuery(); bagagistas = new ArrayList<Bagagista>(); while (rs.next()) { Bagagista bagagista = new Bagagista(); bagagista.setCod(rs.getInt("cod_bag")); bagagista.setNome(rs.getString("Nome_bag")); // bagagista.set bagagistas.add(bagagista); } } catch (SQLException e) { System.out.println("Erro de SQL: " + e.getMessage()); } return bagagistas; }

[code]package Teste.Alocacao;

import Modelo.Hospede;
import java.util.*;
import Persistencia.AlocacaoDAO;
import Modelo.Bagagista;
public class TestaLeTodosPorHospede {

public static void main(String[] args) {
    List<Bagagista> resultado = AlocacaoDAO.leTodosPorHospede(2);

    for(Iterator<Bagagista> iterator=resultado.iterator();
            iterator.hasNext();){
            Bagagista p = iterator.next();
            System.out.println("Pessoa Encontrada: " + p.getNome());
        }
}

}
[/code]

se tiverem como vcs me ajudar agredeço

vlw

Aqui está o erro

PreparedStatement pstm = cn.prepareStatement(  
                   "SELECT * FROM bagagista b INNER JOIN " +  
                   "alocacao a ON b.cod_bag = a.Bagagista_Cod_bag" +  /*não há espaço entre a.Bagagista_Cod_bag e WHERE*/
                   "WHERE a.Hospede_Cod_hos = ?"); 

galera pq que o java não le

PreparedStatement pstm = cn.prepareStatement( "SELECT * FROM bagagista b INNER JOIN " + "alocacao a ON b.cod_bag = a.Bagagista_Cod_bag" + "WHERE a.Hospede_Cod_hos = ?");

mais le:

PreparedStatement pstm = cn.prepareStatement( "SELECT * FROM bagagista b INNER JOIN " + "alocacao a ON b.cod_bag = a.Bagagista_Cod_bag WHERE a.hospede_cod_hos = ?");

to quebrando a kbça a quase uma hora

para ser isso

se tiverem como explicarem como isso funciona pq ficar quebrando a kbça por algo assim é irritante

vlw!!!

vlw amigo

to quebrando kbça há um tempão com isso

vlw

A query que vai para o banco de dados, fica, em cada situação

//1
"SELECT * FROM bagagista b INNER JOIN alocacao a ON b.cod_bag = a.Bagagista_Cod_bagWHERE a.Hospede_Cod_hos = ?"

//2
SELECT * FROM bagagista b INNER JOIN alocacao a ON b.cod_bag = a.Bagagista_Cod_bag WHERE a.hospede_cod_hos = ?

Percebeu?
No primeiro o WHERE está grudado à coluna a ser pesquisada. Isso é um erro de sintaxe.

vlw mano

essa não foi a primeira vez q tive esse tipo de erro na quebra de linha

nunca tinha reparedo esse detalhe

vou ficar mais atento da proxima vez

vlw!!!

mano como ja falei tenho um relacionamento de n:m entre HOSPEDE e BAGAGISTA

tenho uma classe testa LETodosHospedes

nele tem q sair o Endereço q é uma agregaçao onde o hospede recebe o codigo do endereco para eu busca-lo

na minha classe teste e ele me apresentar esse endereco

blz!! isso com agregaçao

so q no relacionamento de n:m como faria para ter esses dados do Bagagista?

teria q referenciar o bagagista na minha classe Hospede com uma agregação?

por enquanto ta assim:


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Modelo;

import java.util.List;

/**
 *
 * @author stharley
 */
public class Hospede extends Pessoa {
    private int codigo;
    private String nacionalidade;
    private int qtdDia;
    private int quarto;
    private List<Bagagista>bagagistas;

    public List<Bagagista> getBagagistas() {
        return bagagistas;
    }

    public void setBagagistas(List<Bagagista> bagagistas) {
        this.bagagistas = bagagistas;
    }

    public int getQuarto() {
        return quarto;
    }

    public void setQuarto(int quarto) {
        this.quarto = quarto;
    }

    public int getCodigo() {
        return codigo;
    }

    public void setCodigo(int codigo) {
        this.codigo = codigo;
    }

    public String getNacionalidade() {
        return nacionalidade;
    }

    public void setNacionalidade(String nacionalidade) {
        this.nacionalidade = nacionalidade;
    }

    public int getQtdDia() {
        return qtdDia;
    }

    public void setQtdDia(int qtdDia) {
        this.qtdDia = qtdDia;
    }

    @Override
    public String toString() {
        return "Hospede{" + "codigo=" + codigo + "nacionalidade=" + nacionalidade + "qtdDia=" + qtdDia + "quarto=" + quarto + "bagagistas=" + bagagistas + '}';
    }

    
}

[code]public static List leTodos(){
List hospede =
new ArrayList();
try{
Connection con = GerenteDeConexao.criaConexao();
Statement stm = con.createStatement();
ResultSet rs = stm.executeQuery(“SELECT * FROM Hospede”);
hospede = new ArrayList();
while(rs.next()){
Hospede hosp = new Hospede();
hosp.setCod(rs.getInt(“cod_hos”));
hosp.setNacionalidade(rs.getString(“nacionalidade_hos”));
hosp.setNome(rs.getString(“nome_hos”));
hosp.setCpf(rs.getString(“cpf_hos”));
hosp.setIdade(rs.getInt(“idade_hos”));
hosp.setTelefone(rs.getString(“telefone_hos”));
hosp.setEndereco(
EnderecoDAO.leUm(rs.getInt(“Endereco_cod_end”)));
hosp.setBagagistas(
AlocacaoDAO.leTodosPorHospede(rs.getInt(“cod_hos”)));
hospede.add( hosp);
}

    }catch (SQLException e){
        System.out.println("Erro ao buscar os dados " + e.getMessage());
    }
    return hospede;
}

[/code]

public static List<Bagagista> leTodosPorHospede(int codigo) { List<Bagagista> bagagistas = new ArrayList<Bagagista>(); try { Connection cn = GerenteDeConexao.criaConexao(); PreparedStatement pstm = cn.prepareStatement( "SELECT * FROM bagagista b INNER JOIN " + "alocacao a ON b.cod_bag = a.Bagagista_Cod_bag WHERE a.hospede_cod_hos = ?"); pstm.setInt(1, codigo); ResultSet rs = pstm.executeQuery(); bagagistas = new ArrayList<Bagagista>(); while (rs.next()) { Bagagista bagagista = new Bagagista(); bagagista.setCod(rs.getInt("cod_bag")); bagagista.setNome(rs.getString("Nome_bag")); // bagagista.set bagagistas.add(bagagista); } } catch (SQLException e) { System.out.println("Erro de SQL: " + e.getMessage()); } return bagagistas; }[quote]

TestaLeTOdos[/quote]

[code]package Teste.Hospede;

import java.util.*;
import Modelo.Pessoa;
import Modelo.Hospede;
import Modelo.Endereco;
import Persistencia.HospedeDAO;

public class TestaLeTodos {

public static void main(String[] args) {
    List<Hospede> resultado = HospedeDAO.leTodos();
   // Endereco ende = new Endereco();
    Pessoa pessoa = new Pessoa();
    Hospede h = new Hospede();
     System.out.println("Hospede Encontrado: ");
    for(Iterator<Hospede> iterator=resultado.iterator();
            iterator.hasNext();){
             h = iterator.next();
           System.out.println(" nome " + h.getNome() +
                   "\n Endereço " + h.getEndereco() +
                   "Bagagista " + h.getBagagistas());
    
}

}

}
[/code]

run: Teste teste Driver carregado com sucesso!!! Conexao efetuada com sucesso!!! Teste teste Driver carregado com sucesso!!! Conexao efetuada com sucesso!!! Teste teste Driver carregado com sucesso!!! Conexao efetuada com sucesso!!! Hospede Encontrado: nome stharley Endereço Endereco{rua=2bairro=Sem nomecomplemento=sei lacidade=águas lindasestado=go}Bagagista [] CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)