Conexao BD postgres com java, resultado da query é null

Boa tarde, estou realizando uma consulta ao banco passando um paramentro, porém o retorno da query é null. A conexão está Ok.

Segue trecho do código da classe CelularDAO

public Celular buscar(Celular celular)

{
     String sql = "SELECT * FROM celular WHERE price=?";
     Celular retorno;
    retorno = null;
    
    PreparedStatement pst = Conexao.getPreparedStatement(sql);
    try {
       
        pst.setString(1, celular.getPrice());
        ResultSet res = pst.executeQuery();
        
        if(res.next())
        {
            retorno = new Celular();
            retorno.setPrice(res.getString("price"));
            retorno.setModel(res.getString("model"));
            retorno.setBrand(res.getString("brand"));
            retorno.setPhotocel(res.getString("photocel"));
            retorno.setDate(res.getString("date"));
            retorno.setCode(res.getString("code"));

        }else {

//se os dados não existirem no Bamco de Dados ele exibibe a mensagem de erro!
System.out.println(“Dados incorretos!”);
}

    } catch (SQLException ex) {
        Logger.getLogger(CelularDAO.class.getName()).log(Level.SEVERE, null, ex);
        
    }

Trecho da classe Mobile

@GET
@Produces(MediaType.APPLICATION_JSON)
@Path(“Celular/get/{price}”)
public String getCelular(@PathParam(“price”) String price)
{

Celular c = new Celular();
c.setPrice(price);

CelularDAO dao = new CelularDAO();
c = dao.buscar(c);

Por favor, preciso de help!

Sua coluna price não é um varchar?
Neste caso mude a query para ficar assim:

SELECT * FROM celular WHERE price like ?
1 curtida

Obrigado por contribuir. Porém continua sempre aparecendo null no resultado do console, independente do campo que chame, estou usando o Gson pra chamar no banco passando um parametro. :frowning:

A coluna Price é integer as outras sao texto

Qual o valor do parâmetro price?
Se você faz a consulta diretamente no client do seu banco de dados, a query traz algum resultado?

1 curtida
public List<Celular> buscar(Celular celular){
     String sql = "SELECT * FROM celular WHERE price=?";
     List<Celular> celulars = new ArrayList();
    
    try {
        PreparedStatement pst = Conexao.getPreparedStatement(sql);
        pst.setString(1, celular.getPrice());
        ResultSet res = pst.executeQuery();
        if(res.next()){
           Celular celular = new Celular();
            celular.setPrice(res.getString("price"));
            celular.setModel(res.getString("model"));
            celular.setBrand(res.getString("brand"));
            celular.setPhotocel(res.getString("photocel"));
            celular.setDate(res.getString("date"));
            celular.setCode(res.getString("code"));
celulars.add(celular);
        }
        return celulars;
    } catch (SQLException ex) {
        Logger.getLogger(CelularDAO.class.getName()).log(Level.SEVERE, null, ex);
return null;        
    }
    
}

levando em consideração q com price vc quiz dizer preço, pode haver mais de um celular com este select, então o retorno do metodo ficaria melhor com List
coloca um break nesta linha e confira se essa Conexao n esta nula
PreparedStatement pst = Conexao.getPreparedStatement(sql);

e tmb seu metodo estava sem retorno

1 curtida

Fiz uma parte de classe DAO como essa há poucos dias, e em vez de citar “price”, “model” etc dentro do getString, eu chamava 1, 2, 3 etc. Segue o exemplo:

        public List read() {

            PreparedStatement state;
            ResultSet rs;

            try {

                state = ConnectionFactory.getConnection().prepareStatement(SQLBUSCAR);
                rs = state.executeQuery();

                while (rs.next()) {
                    ContasModel contasModel = new ContasModel();
                    // Aqui vem o ponto em questão que eu falei que chamo números em vez de chamar o nome do campo.
                    contasModel.setConta(rs.getInt(1));
                    contasModel.setNome(rs.getString(2));
                    contasModel.setSaldo(rs.getDouble(3));
                    contasModel.setLimite(rs.getDouble(4)); 

                    contasBD.add(contasModel); // Adicionando numa ArrayList para trabalhar com os dados posteriormente
                }
               
                return contasBD;
                
            } catch (SQLException ex) {
                System.err.println("Erro: " + ex);
            }
            return null;

        }

Veja se fazendo essa mudança ele para de dar query como null.

Isso aqui também é bom para termos uma noção se o problema está no código ou no seu BD. Faça o select direto do BD e veja se a query está null.

1 curtida