Sql [resolvido]

7 respostas
ricardocomp

Olá pessoal,
eu estou querendo construir um método
de busca para me retornar todos
os nomes semelhantes que usário
esteja procurando:

public List<Tecnico> buscarTecnicos(String nome) throws LAFQADaoException {

        PreparedStatement ps = null;
        ResultSet rs = null;

        try {

            ps = conn.prepareStatement("SELECT * FROM tecnico WHERE nome LIKE '%?%'");
            ps.setString(1, nome);
            rs = ps.executeQuery();

            if (!rs.next()) {
                throw new Exception("Não foi encontrado nenhum"
                                    + " Tecnico com o Nome: " + nome);
            }
          
            List<Tecnico> list = new ArrayList<Tecnico>();
            while (rs.next()) {
                int idTecnico = rs.getInt(1);
                int idUsuario = rs.getInt(2);
                nome = rs.getString(3);
                String telefone = rs.getString(4);
                String celular = rs.getString(5);
                String email = rs.getString(6);

                UsuarioSistemaDao usuarioDao = new UsuarioSistemaDao();
                UsuarioSistema usuario = usuarioDao.procurarUsuarioSistema(idUsuario);

                list.add(new Tecnico(idTecnico, usuario, nome, telefone, celular, email));
            }
            return list;
           

        }
...
}

Só que toda hora aparece a seguinte mensagem:

Falha ao cadastrar o usuário!
23/11/2009 08:25:19 teste.TesteGeral main
SEVERE: null
exception.LAFQADaoException: java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
        at dao.TecnicoDao.buscarTecnicos(TecnicoDao.java:234)
        at teste.TesteGeral.main(TesteGeral.java:302)
Caused by: java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
        at com.mysql.jdbc.PreparedStatement.checkBounds(PreparedStatement.java:3288)
        at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3272)
        at com.mysql.jdbc.PreparedStatement.setString(PreparedStatement.java:4108)
        at dao.TecnicoDao.buscarTecnicos(TecnicoDao.java:207)
        ... 1 more
CONSTRUÍDO COM SUCESSO (tempo total: 1 segundo)

Será que alguém poderia me dar uma ajuda?

[]'s.

7 Respostas

Pedrosa

Monte a sintaxe do Like no setString e na query use apenas o ?:

ps.setString(1, "%' +nome +"%');
zoren

qdo vc usa o setString vc não pode utilizar aspas simples ou apostrofo

para fazer a pesquisa assim vc vai ter q concatenar o simbolo de percento com a sua string

senão ele n aceita como parametro

ricardocomp

Olá pessoal,
Obrigado pela ajuda eu fiz
desse jeito:

ps = conn.prepareStatement("SELECT * FROM tecnico WHERE nome LIKE ?");

            ps.setString(1,"'%" + nome + "%'");
            rs = ps.executeQuery();

            if (!rs.next()) {
                throw new Exception("Não foi encontrado nenhum"
                                    + " Tecnico com o Nome: " + nome);
            }

e procurei no MySQL Query Browser um nome
que tinha na tabela de tecnicos e ele não me retornou.

apareceu a seguinte mensagem:

23/11/2009 09:20:58 teste.TesteGeral main
SEVERE: null
exception.LAFQADaoException: java.lang.Exception: Não foi encontrado nenhum Tecnico com o Nome: Marcos
        at dao.TecnicoDao.buscarTecnicos(TecnicoDao.java:243)
        at teste.TesteGeral.main(TesteGeral.java:302)
Caused by: java.lang.Exception: Não foi encontrado nenhum Tecnico com o Nome: Marcos
        at dao.TecnicoDao.buscarTecnicos(TecnicoDao.java:220)
        ... 1 more
CONSTRUÍDO COM SUCESSO (tempo total: 1 segundo)

o registro cai dentro do if, alguém sabe o que
pode ter acontecido?

[]'s.

pmlm
ps.setString(1,"%" + nome + "%");

Sem as ’

ricardocomp

Jóia pmlm?
eu tirei as aspas do setString
e coloquei na consulta:

ps = conn.prepareStatement("SELECT * FROM tecnico WHERE nome LIKE '?' ");

Mas pareceu a seguinte mensagem:

23/11/2009 09:40:09 teste.TesteGeral main
SEVERE: null
exception.LAFQADaoException: java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
        at dao.TecnicoDao.buscarTecnicos(TecnicoDao.java:239)
        at teste.TesteGeral.main(TesteGeral.java:302)
Caused by: java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
        at com.mysql.jdbc.PreparedStatement.checkBounds(PreparedStatement.java:3288)
        at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3272)
        at com.mysql.jdbc.PreparedStatement.setString(PreparedStatement.java:4108)
        at dao.TecnicoDao.buscarTecnicos(TecnicoDao.java:216)
        ... 1 more
CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)

Você ou alguém sabe o que deve
estar acontecendo?

Será que alguém pode me dar um ajuda?

[]'s.

B

Quando você utiliza setString você não precisa usar o apostrofe.
O método se encarrega de fazer isso para você.

Você não precisa colocar o apóstrofe no setString e nem no SQL.
Simplesmente não o utilize.

ps = conn.prepareStatement("SELECT * FROM tecnico WHERE nome LIKE ? ");   
ps.setString(1, "%" + nome + "%");
ricardocomp

Jóia blaine?
Tirei os apostrofos aqui e deu certo,
Muito obrigado pessoal pela ajuda
de todos. :smiley:

Abração.

Criado 23 de novembro de 2009
Ultima resposta 23 de nov. de 2009
Respostas 7
Participantes 5