shenn
Agosto 19, 2011, 10:08am
#1
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]
nel
Agosto 19, 2011, 10:10am
#2
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!
shenn
Agosto 19, 2011, 10:22am
#4
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
Agosto 19, 2011, 10:24am
#5
Não não Henrique.
Ele usa justamente o LIKE porque ele passa o parametro “Harry” e há dois filmes cadastrados:
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
Agosto 19, 2011, 10:27am
#6
eu ja fiz um debug, ele esta dando 2 voltas no while, mas nas duas ele pega o harry potter 2
shenn
Agosto 19, 2011, 11:01am
#7
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;
}
}