Metodo procurar

6 respostas
shenn

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:
public List<Filmes> 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<Filmes> listaDeNome = new ArrayList<Filmes>();

			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;
		}
	}

6 Respostas

nel

Oi!

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

henriqueluz

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!

shenn

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 =/

nel

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.

shenn

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

shenn

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;
		}
	}
Criado 19 de agosto de 2011
Ultima resposta 19 de ago. de 2011
Respostas 6
Participantes 3