Busca Simples Mysql

4 respostas
E

Ola pessoal então estou desenvolvendo uma pagina web e estou com dificuldades de fazer uma busca utilizando o banco Mysql

O caso é uma busca simples, por nome do candidato(pessoa), o qual deve retornar uma lista com nomes iniciados pela string digitada no campo de busca.

Segue o código:

public List<Candidato> listarPorNome() {
		try {
			
			List<Candidato> candidatos = new ArrayList<Candidato>();
			PreparedStatement stmt = this.connection.prepareStatement("select * from candidatos where can_nom like ?");

			
			ResultSet rs = stmt.executeQuery();
			
			while (rs.next()) {
				candidatos.add(populaCandidatoPorNome(rs));
			}
			
			rs.close();
			stmt.close();
			
			return candidatos;
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
		
	}
private Candidato populaCandidatoPorNome(ResultSet rs) throws SQLException {
		Candidato candidato = new Candidato();
		
		candidato.setNome(rs.getString("nom_can"));
		candidato.setId(rs.getLong("id_can"));
		
		return candidato;
	}

Estou recebendo o seguinte erro

java.lang.RuntimeException: java.sql.SQLException: No value specified for parameter 1

Alguem pode me ajudar? existe um modo mais eficiente de se fazer essa busca?

Grato

4 Respostas

douglaskd

seu método deve receber uma string.

public List<Candidato> listarPorNome(String nome) {

abaixo de

PreparedStatement stmt = this.connection.prepareStatement("select * from candidatos where can_nom like ?");

insira isso:

stmt.setString(1, " nome%' ");

é pra funcionar…

Allexb10

Acredito que seja isso que o Douglas relatou.
Temos que especificar o numero das colunas do nosso
BD.
Por exemplo:
Temos no banco

coluna1 = ID
coluna2 = NOME
coluna3 = SOBRENOME.

Então referenciamos assim:

stmt.setString(1, ID);

stmt.setString(2, NOME);

stmt.setString(3, SOBRENOME);

BLZ?

E

hm ele não da erro porém a busca esta sempre retornando vazia…

public List<Candidato> listarPorNome(String nome) {
		try {
			
			List<Candidato> candidatos = new ArrayList<Candidato>();
			PreparedStatement stmt = this.connection.prepareStatement("select * from candidatos where nom_can like ?");
			stmt.setString(1, " nome%' ");

Estou usando Struts2 tambem tive que mudar umas coisas na Action

public class ListarCandidatosPorNomeAction {

	
	private List<Candidato> candidato;
	
	@Action(value = "listaCandidatoPorNome", results={
		@Result(name="ok", location="listar-candidato-por-nome.jsp")
	})
	public String execute() {
		String nome = null;
		candidato = new CandidatoDAO().listarPorNome(nome);
		return "ok";
	}

	public List<Candidato> getCandidato() {
		return candidato;
	}

	public void setCandidato(List<Candidato> candidato) {
		this.candidato = candidato;
	}
	
}

No caso, criei uma String nome na action e a inicializei

Mas ainda não funciona… sempre retorna uma lista vazia

Algumas duvidas:

No caso, essa linha stmt.setString(1, " nome%’ "); --> “nome%” deve ser substituido por alguma outra coisa, tipo metodo get, o nome da coluna do banco mysql, ou é uma variavel e deve ser mantida assim msm

A action esta certa com essa nova String?

E

Acho que descobri o problema!!

Então na Action quando declarei a String Nome, inicializei como “null”.

Depois a idéia é que ele set o valor da String nome com o campo de pesquisa na textbox

Porem isto não esta acontecendo!! Quando inicializo a String como “a” por exemplo, ele lista todos os nomes com a corretamente

Alguem tem uma idéia de como resolver isso?

Criado 24 de abril de 2012
Ultima resposta 24 de abr. de 2012
Respostas 4
Participantes 3