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?