Metodo procurar

Eae galera, tenho esse metodo de pesquisa na classe dao, porem esta dando um erro:
Exemplo:
Existem 2 filmes no bd

  • Harry Potter 1
  • Harry Potter 2

quando eu pesquiso por harry o metodo era mostrar 2 vezes o Harry Potter 2

vlww galeraa
segue o codigo:

[code]
public List pesquisarNome(Filmes filmes) {
String sql = “SELECT * FROM tb_filmes WHERE nomefilme ILIKE ?”;
try {
logger.info(“Iniciando metodo listar filmes por nome”);
PreparedStatement ps = conexao.prepareStatement(sql);
ps.setString(1, “%” + filmes.getPesquisarnome() + “%”);
ResultSet rs = ps.executeQuery();
List listaDeNome = new ArrayList();

		while (rs.next()){
			filmes.setNomefilme(rs.getString(1));
			filmes.setAno(rs.getString(2));
			filmes.setIdRestricao(rs.getString(3));
			filmes.setDescricao(rs.getString(4));
			filmes.setGenero(rs.getString(5));
			filmes.setMidiavhs(rs.getBoolean(6));
			filmes.setMidiabluray(rs.getBoolean(7));
			filmes.setMidiadvd(rs.getBoolean(8));
			listaDeNome.add(filmes);
		}
		ps.execute();
		ps.close();
		logger.info("Finalizando metodo listar filmes");
		return listaDeNome;
	} catch (SQLException e) {
		logger.error("Error metodo listar filmes");
		e.printStackTrace();
		return null;
	}
}[/code]

Oi!

Não seria somente LIKE ao invés do ILIKE?

nel

Acredito que o bd dele seja postgres, e o ILIKE não é case sensitive. Acho que esse não é o problema.

shenn
Se você tem Harry Potter 2 uma vez, por que o banco tem que retornar ele duas vezes?
Não entendi!

estou usando o postgres

entao pelo que andei pesquisando o ilike é tipo um case sensitive

isso que eu não sei porque ele esta retornando o harry potter 2 duas vezes =/

Não não Henrique.
Ele usa justamente o LIKE porque ele passa o parametro “Harry” e há dois filmes cadastrados:

  • Harry 1 e Harry 2

Eu recomendo dar um System.out.println() na string que está setando no seu PreparedStatement para confirmar que o conteúdo passado está correto.
Depois, pegar o SQL que é aplicado e usar ele dentro de um client do seu BD, confirmando que sua SQL está correta.

eu ja fiz um debug, ele esta dando 2 voltas no while, mas nas duas ele pega o harry potter 2

galera consegui achar o erro, mas mesmo assim obrigado pela ajuda


	public List<Filmes> pesquisarNome(Filmes filmes1) {
		String sql = "SELECT * FROM tb_filmes WHERE nomefilme ILIKE ?";
		try {
			logger.info("Iniciando metodo listar filmes por nome");
			PreparedStatement ps = conexao.prepareStatement(sql);
			ps.setString(1, "%" + filmes1.getPesquisarnome() + "%");
			ResultSet rs = ps.executeQuery();
			List<Filmes> listaDeNome = new ArrayList<Filmes>();
			while (rs.next()){
				Filmes filmes = new Filmes (); // precisava disso
				filmes.setNomefilme(rs.getString(1));
				filmes.setAno(rs.getString(2));
				filmes.setIdRestricao(rs.getString(3));
				filmes.setDescricao(rs.getString(4));
				filmes.setGenero(rs.getString(5));
				filmes.setMidiavhs(rs.getBoolean(6));
				filmes.setMidiabluray(rs.getBoolean(7));
				filmes.setMidiadvd(rs.getBoolean(8));
				listaDeNome.add(filmes);
			}
			ps.execute();
			ps.close();
			logger.info("Finalizando metodo listar filmes");
			return listaDeNome;
		} catch (SQLException e) {
			logger.error("Error metodo listar filmes");
			e.printStackTrace();
			return null;
		}
	}