Re:combo box a partir de um banco de dados

9 respostas
Pedrosa

Vc deve criar uma classe de negocio com sua query, chamar essa classe em uma servlet e passar via request para o jsp, nunca coloque códigos java no seu jsp.

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

import br.com.xx.jdbc.ConnectionFactory;
import br.com.xx.struts.model.EmpresaAtendenteBean;

public class EmpresaAtendenteDAO {
	private Connection connection;

	// construtor que recebe a conexão
	public EmpresaAtendenteDAO(Connection con) {
		this.connection = con;
	}

	public EmpresaAtendenteDAO() throws SQLException {
		this.connection = ConnectionFactory.getConnection();
	}

	public List<EmpresaAtendenteBean> getLista() throws SQLException {
		String sql = "SELECT CAMPO1,CAMPO2 FROM TABELA";
		PreparedStatement stmt = this.connection.prepareStatement(sql);
		ResultSet rs = stmt.executeQuery();

		List<EmpresaAtendenteBean> list = new ArrayList<EmpresaAtendenteBean>();
		while (rs.next()) {
			EmpresaAtendenteBean empresatendente = new EmpresaAtendenteBean();
			empresatendente.setCodigo(rs.getInt("Id"));
			empresatendente.setDescricao(rs.getString("Descricao"));

			// adicionando o objeto à lista
			list.add(empresatendente);
		}

		rs.close();
		stmt.close();
		return list;
	}
}

//Servlet

EmpresaAtendenteDAO lista = new EmpresaAtendenteDAO()
request.setAttribute("empresatendente", lista.getLista());

//JSP

<select name="empresaAtendente">
	<option value="">.. Selecione ..</option>
	<c:forEach var="empresa" items="${empresatendente}">
		<option value="${empresa.codigo}">
		     ${empresa.descricao}
		</option>
	</c:forEach>
</select>

No meu jsp estou usando a taglib jstl que deve estar na sua aplicação na pasta lib.

9 Respostas

M

bom, farei um exemplo super simples usando somente JSP…

<select name="combo">
<%
Class.forName(driver); //driver do banco usado
String connUrl = "jdbc://...."; // url de conexao ao banco
Connection conn = DriverManager.getConnection(connUrl);

Statement stmt = conn.createStatement();
String sqlQuery = "SELECT <campos> FROM <tabela> WHERE <condicao>";
ResultSet rs = stmt.execute(sqlQuery);
while(rs.next()) {
   //supondo que o valor do combo seja sua primeira coluna da consulta
   String valor = rs.getString(1);
   
%>

   <option value="<%=valor%>"><%=valor%></option>

<%
// encerra o bloco do while
}
%>
</select>
M

eh, realmente meu código está totalmente fora de qualquer padrão, e super simples também, mas acredito que seja o de mais fácil entendimento para quem, acredito, esteja apenas começando a aprender java…

bom era isso…
[]'s

:wink:

Pedrosa

Cara nunca incentive essa má prática, colocando sriplets e codigos java em uma aplicação, esse modelo de programação é tipico de asp e php bem porcos, imagine que essa aplicação cresça o cara vai replicar essas conexões em todas as páginas?

M

longe de mim ficar passando essas má praticas, mas como eu tinha citado no meu post, minha intenção não é ficar montando toda uma estrutura para postar, mas sim mostrar os caminhos das pedras para quem está apenas começando, cabe ao interessado em se aperfeiçoar em ir atrás de conhecimentos de padroes de projeto, boas práticas, etc…

:wink:

Pedrosa

Pois é a primeira coisa que ouvimos nos cursos é: não use isso scriplets e codigos java no jsp, mas ensinam a título de curiosidade, pois ainda existem muitos sistemas com esse tipo de código.

Leozin

então como seria a melhor maneira, melhor prática para acessar esses dados e inserir em um combobox ou qualquer outra forma de visualizar dados já que sciptlets é coisa fora de padrão?

Pedrosa

Use JSTL e faça a iteração no seu JSP com a tag forEach, nenhum código java e nada de regra de negócio, pega a list, vector, linkedlist do request ou sessao, o que for a taglib se vira e monta.

<select name="empresaAtendente">
 	<option value="">.. Selecione ..</option>
 	<c:forEach var="empresa" items="${empresatendente}">
 		<option value="${empresa.codigo}">
 		     ${empresa.descricao}
 		</option>
 	</c:forEach>
 </select>
Leozin

hmmmm interessante hehehe

M

Bom dia, por acaso alguem pode me dar um exemplode como criar um combo box a partir de um banco de dados (so quero que apareça na listagem do combo o conteudo de uma tabela)
isso eu ainda nao achei como fazer , obrigado. :oops:

Criado 4 de abril de 2006
Ultima resposta 4 de abr. de 2006
Respostas 9
Participantes 4