Método de busca usando PreparedStatement não funciona

4 respostas
M

Boa Tarde pessoal tô com um problema em fazer uma busca usando PreparedStatement, não da nenhum erro, simplesmente não encontra registro algum, quando uso PreparedStatement.

Minhas classes são:

Conexao.java
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.com.mjjoias.data;

import java.sql.Connection;
import java.sql.DriverManager;

/**
 *
 * @author markin
 */
public class Conexao {

    // <editor-fold desc="Atributos">
    private Connection conexao = null;
    // </editor-fold>

    // <editor-fold desc="Construtor">
    public Conexao()
    {

    }
    // </editor-fold>

    // <editor-fold desc="Métodos Públicos">
    /**
     * Método responsável por abrir a conexão com o BD
     * @return Conexão com o BD
     */
    public Connection openConnection(){
        try{
            // define o driver JDBC do banco de dados:
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

            String url = "jdbc:odbc:mjjoias";
            conexao = DriverManager.getConnection(url);
        }catch(Exception ex){
            ex.getMessage();
        }
        return conexao;
    }

    /**
     * Método responsável por fechar a conexão com o BD
     */
    public void closeConnection(){
        try{
            conexao.close();
        }catch(Exception ex){
            ex.getMessage();
        }
    }
    // </editor-fold>
}
CargoBean.java
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.com.mjjoias.bean;
/**
 *
 * @author markin
 */
public class CargoBean {
    //<editor-fold desc="Atributos">
    private int IdCargo;
    private String Nome;
    //</editor-fold>

    //<editor-fold desc="Métodos Get/Set">
    /**
     * @return the IdCargo
     */
    public int getIdCargo() {
        return IdCargo;
    }

    /**
     * @param IdCargo the IdCargo to set
     */
    public void setIdCargo(int IdCargo) {
        this.IdCargo = IdCargo;
    }

    /**
     * @return the Nome
     */
    public String getNome() {
        return Nome;
    }

    /**
     * @param Nome the Nome to set
     */
    public void setNome(String Nome) {
        this.Nome = Nome;
    }
    //</editor-fold>
}
CargoData.java (só o metodo de busca)
public List<CargoBean> Lista(String Nome){
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        List<CargoBean> lista = new ArrayList<CargoBean>();
        String SQL = "SELECT IdCargo, Nome FROM Cargos WHERE Nome LIKE ?";

        try{
            StringBuffer buffer = new StringBuffer("%");
            buffer.append(Nome);
            buffer.append("%");

            pstmt = openConnection().prepareStatement(SQL);
            pstmt.setString(1, buffer.toString());

            /* variável do tipo resultSet recebendo os valores retornados pela busca
             * sempre que for executar um comando select o preparedStatement
             * tem que executar uma Query
             */
            rs = pstmt.executeQuery();

            while(rs.next()){
                CargoBean bean = new CargoBean();

                bean.setIdCargo(rs.getInt("IdCargo"));
                bean.setNome(rs.getString("Nome"));

                lista.add(bean);
            }

            return lista;
        }catch(Exception ex){
            ex.getMessage();
        }finally{
            pstmt = null;
            closeConnection();
        }
        return null;
    }
Tabela no Banco:
create table cargos(  
IdCargo int not null primary key identity,  
Nome varchar(50) not null  
)
Se eu concatenar diretamente o parâmetro de busca na String SQL funciona, desse jeito:
String SQL = "SELECT IdCargo, Nome FROM Cargos WHERE Nome LIKE '%"+Nome+"%'";
Minha duvida é porque com PreparedStatement não está funcionando.

Se alguém souber e puder me ajudar, fico grato.

4 Respostas

Pedrosa

Tente assim:

pstmt.setString(1, "'%+nome+%'");  //ajustar aqui monte igual ao jeito que funciona.
M

Pedrosa:
Tente assim:

pstmt.setString(1, "'%+nome+%'"); //ajustar aqui monte igual ao jeito que funciona.

Eu já tentei fazer assim também, e não funcionou. Não consigo ver onde está o erro ^^

Pedrosa

Veja assim:

p.setString(1, "%"+ variavelComOValor +"%");
M

Pedrosa:
Veja assim:

p.setString(1, "%"+ variavelComOValor +"%");

fiz assim:

pstmt.setString(1, "'%"+Nome+"%'");

e assim também:

pstmt.setString(1, "%"+Nome+"%");

E nada!! T_T

Criado 17 de fevereiro de 2009
Ultima resposta 17 de fev. de 2009
Respostas 4
Participantes 2