Busca Simples Mysql

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

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…

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?

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?

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?