Carregar combobox com tabela relacional

3 respostas
J

Boa noite a todos,

sou novato aqui e gostaria de algumas sugestões, se for possível, é claro!
Fiz um cadastrinho bem básico, com duas tabelas, uma chamada ESTADO com os campos sigla e estado, e outra tabela chamada CIDADE, com os campos codigo, cidade e sigla, relacionais entre si, relacionada pelo campo sigla.
Minha dúvida é como fazer om “combobox” carregando as siglas (ou os estados) no cadastro de cidades, visto que o usuário não sabe quais os estados já cadastrados ou ainda pode
digitar errado.
Estou usando o banco de dados MySQL.

Obrigado!

3 Respostas

J

Olá Juliok. Uma maneira bem simples de fazer, dentre as várias possiveis, é você fazer a consulta normalmente no banco, usando ResultSet. Faz algo do tipo:

Statement stmt = <objeto Connection>.createStatement();
     ResultSet rs = stmt.executeQuery();

Depois basta você adicionar os objectos obtidos por um método get do resultset em um objeto do tipo Vector:

Vector<String> vet = new Vector<String>(); //Use o tipo anotado que quiser
     while(rs.next()) 
         vet.add(rs.getString("NOME_ESTADO_TABELA"));

Depois retorne o Vector vet à classe que mantem o controle sobre o JComboBox e passe o vet ao construtor do JComboBox:

JComboBox cboEstado = new JComboBox(vet);

Outra forma interessante é voce adicionar ValueObjects ao Vector. Para isso voce precisaria criar um JavaBean para sua entidade estado:

public class Estado{

             int codigo;
             String estado;

             //getter

            //setters
      }

 
      Vector<Estado> vet = new Vector<Estado>(); 
       Estado estado = new Estado();

     while(rs.next()) {
     
          estado.setCodigo(rs.getString("ID_ESTADO_TABELA"));          
          estado.setNome(rs.getString("NOME_ESTADO_TABELA"));

          vet.add(estado);
     }

Isso vai exibir um texto muito louco, que é a representação do objeto na memória. Agora não me pergunte como exibir um atributo. Já vi isso sendo feito, só não sei como. rsrsrs.

Espero ter ajudado.
[]'s

J

Obrigado amigo!
Mas é o seguinte, eu não vou poder usar o JComboBox, pois estou fazendo uma aplicaçãozinha web mesmo (esqueci de mencionar), mas carregando os dados em um vetor, acredito que não terei problemas em usá-lo com um <select> na página!

Da mesma forma posso usar o Statement né? já andei tentando, mas dá um erro, acredito que eu esteja declarando ele de forma ou em um lugar errado! Segue o código, se alguém estiver disposto a dar alguma dica!

=]

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
public class CidadeInclui extends HttpServlet {
    boolean erro = false;
    Connection con;
    String msgErro = new String();
// dados da pagina
    String cidade, sigla;
    
    public void doGet(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException {
        erro = !carregaBd();
        res.setContentType("text/html");
        PrintWriter out= res.getWriter();
        if (erro) {
            out.println(mensagem(msgErro));
            return;
        }
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Cidade</title>");
        out.println("</head>");
        out.println("<form action='http://localhost:8084/TCC/CidadeInclui' method='post' name='form1'>");
        out.println("<table border='0'>");
        out.println("<tr>");
        out.println("<td width='100%' align='left'>Cadastro de Cidade</td>");
        out.println("</tr>");
        out.println("<tr>");
        out.println("<td width='100%' align='left'");
        out.println("<hr>");
        out.println("</td>");
        out.println("</tr>");
        out.println("</table>");
        out.println("<table border='0'>");
        out.println("<tr>");
        out.println("<td align='right'>Cidade:</td>");
        out.println("<td align='left'> <input type='text' name='cidade' size='45' maxlength=' 40'>");
        out.println("</td>");
        out.println("</tr>");
        out.println("<tr>");
        out.println("<td align='right'>Sigla:</td>");
        out.println("<td align='left'> <input type='text' name='sigla' size='10' maxlength='2'>");
        out.println("</td>");
        out.println("</tr>");
        out.println("<tr>");
        out.println("<td></td>");
        out.println("<td>&nbsp;</td>");
        out.println("</tr>");
        out.println("<tr>");
        out.println("<td align='right'><input type='submit' name='grava' value=' Gravar '>");
                out.println("</td>");
        out.println("<td align='left'><input type='reset' name='cancela' value='Cancelar'>");
                out.println("</td>");
        out.println("</tr>");
        out.println("</table>");
        out.println("</form>");
        out.println("</body>");
        out.println("</html>");
// fecha conexao banco de dados
        try { con.close(); } catch (Exception e) {}
    }
    public void doPost(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException {
        erro = !carregaBd();
        PreparedStatement statement;
        ResultSet resultado = null;
        String sql;
        //codigo = req.getParameter("codigo");
        cidade = req.getParameter("cidade");
        sigla = req.getParameter("sigla");
        res.setContentType("text/html");
        PrintWriter out= res.getWriter();
        if (erro) {
            out.println(mensagem(msgErro));
            return;
        }

        try {
            sql = "insert into cidade (cidade, sigla) values (?, ?)";
            statement = con.prepareStatement(sql);
            //statement.setString(1, codigo);
            statement.setString(1,cidade);
            statement.setString(2, sigla);            
            statement.executeUpdate();
            statement.close();
        } catch (SQLException e) {
            out.println(mensagem("Registro não incluido"+e.toString()));
            return;
        }
        out.println(mensagem("Incluido com sucesso"));
        out.println("<br><a href=http://localhost:8084/TCC/>index</a>");
// fecha bd
        try { con.close(); } catch (Exception e) {}
    }
    private String mensagem(String msg) {
        String paginaMensagem = new String();
        paginaMensagem = "<html><head><title>Mensagem</title></head>";
        paginaMensagem += "<body><h2>"+msg+"</h2></body></html>";
        return paginaMensagem;
    }
    private boolean carregaBd() {
// Carrega driver
        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
        } catch (Exception e) {
            msgErro = "Erro ao carregar driver Banco Dados "+e.toString();
            return false;
        }
// Cria conexao com BD
        try {
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/TCC", "root", "admin");
        } catch (Exception e) {
            msgErro = "Erro ao conectar ao Banco de dados"+e.toString();
            return false;
        }
        return true;
    }
}
J

Bem, seguindo as dicas do colega Jean_SI e tendo como base alguns exemplos que tenho aqui, cheguei até o seguinte codigo.

O problema é que na hora de carregar o combo (<select>) ele não encontra a variável vetor[], que está declarada abaixo. Já tentei declarar em outros lugares do código, mas dá erro nisso em outras coisas.

Não sei se fui claro, mas será que alguém tem alguma idéia?

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
public class CidadeInclui extends HttpServlet {
    boolean erro = false;
    Connection con;
    String msgErro = new String();
// dados da pagina
    String cidade, sigla;
   
    public void doGet(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException {
        erro = !carregaBd();
        res.setContentType("text/html");
        PrintWriter out= res.getWriter();
        if (erro) {
            out.println(mensagem(msgErro));
            return;
        }
        
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Cidade</title>");
        out.println("</head>");
        out.println("<form action='http://localhost:8084/TCC/CidadeInclui' method='post' name='form1'>");
        out.println("<table border='0'>");
        out.println("<tr>");
        out.println("<td width='100%' align='left'>Cadastro de Cidade</td>");
        out.println("</tr>");
        out.println("<tr>");
        out.println("<td width='100%' align='left'");
        out.println("<hr>");
        out.println("</td>");
        out.println("</tr>");
        out.println("</table>");
        out.println("<table border='0'>");
        out.println("<tr>");
        out.println("<td align='right'>Cidade:</td>");
        out.println("<td align='left'> <input type='text' name='cidade' size='45' maxlength=' 40'>");
        out.println("</td>");
        out.println("</tr>");
        
        out.println("<tr>");
        out.println("<td align='right'>Sigla:</td>");
        out.println("<td align='left'> <select name='sigla' class='input'>");
        out.println("<option>" + vetor[0] + "</option>");
        //out.println("<option>" + vetor[1] + "</option>");
        out.println("</td>");
        
        out.println("</tr>");
        out.println("<tr>");
        out.println("<td></td>");
        out.println("<td>&nbsp;</td>");
        out.println("</tr>");
        out.println("<tr>");
        out.println("<td align='right'><input type='submit' name='grava' value=' Gravar '>");
                out.println("</td>");
        out.println("<td align='left'><input type='reset' name='cancela' value='Cancelar'>");
                out.println("</td>");
        out.println("</tr>");
        out.println("</table>");
        out.println("</form>");
        out.println("</body>");
        out.println("</html>");
// fecha conexao banco de dados
        try { con.close(); } catch (Exception e) {}
    }
    public void doPost(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException {
        erro = !carregaBd();
        PreparedStatement statement;
        ResultSet resultado = null;
        String sql;
        //codigo = req.getParameter("codigo");
        cidade = req.getParameter("cidade");
        sigla = req.getParameter("sigla");
        res.setContentType("text/html");
        PrintWriter out= res.getWriter();
        if (erro) {
            out.println(mensagem(msgErro));
            return;
        }

        try {
            
           String carrega = "select * from estado";
           Statement stmt = con.createStatement();
           ResultSet rs = stmt.executeQuery(carrega);
           int i=0;
           
           String vetor[];
           vetor = new String[10];
            while(rs.next()) {
                vetor[i] = rs.getString("Estado"); 
                i++;  
            }
            
            
            sql = "insert into cidade (cidade, sigla) values (?, ?)";
            statement = con.prepareStatement(sql);
            //statement.setString(1, codigo);
            statement.setString(1,cidade);
            statement.setString(2, sigla);           
            statement.executeUpdate();
            statement.close();
        } catch (SQLException e) {
            out.println(mensagem("Registro não incluido"+e.toString()));
            return;
        }
        out.println(mensagem("Incluido com sucesso"));
        out.println("<br><a href=http://localhost:8084/TCC/>index</a>");
// fecha bd
        try { con.close(); } catch (Exception e) {}
    }
    private String mensagem(String msg) {
        String paginaMensagem = new String();
        paginaMensagem = "<html><head><title>Mensagem</title></head>";
        paginaMensagem += "<body><h2>"+msg+"</h2></body></html>";
        return paginaMensagem;
    }
    private boolean carregaBd() {
// Carrega driver
        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
        } catch (Exception e) {
            msgErro = "Erro ao carregar driver Banco Dados "+e.toString();
            return false;
        }
// Cria conexao com BD
        try {
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/TCC", "root", "admin");
        } catch (Exception e) {
            msgErro = "Erro ao conectar ao Banco de dados"+e.toString();
            return false;
        }
        return true;
    }
}
Criado 10 de março de 2007
Ultima resposta 25 de mar. de 2007
Respostas 3
Participantes 2