Metodo para atualizar um valor

Olá Pessoal!

Estou tentando atualizar um valor na tabela do BD e não estou conseguindo. Segue abaixo o codigo da classe DAO que utilizo:

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

package br.com.jairo.dao;

import br.com.jairo.fabrica.FabricaConexao;
import br.com.jairo.modelo.Contas;
import br.com.jairo.modelo.Creditos;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Jairo
 */
public class CreditoDAO {

    private Connection connection;

     public CreditoDAO() {
        this.connection = new FabricaConexao().getConnection();
    }

    //metodo para incluir credito
    public void novaCredito(Creditos creditos,String conCodigo,Contas contaComSaldo) throws SQLException {

        String sqls = "select * from contas  where concodigo = "+conCodigo+" ";

         PreparedStatement psc = null;
         ResultSet rsc = null;
         try {
            psc = connection.prepareStatement(sqls);
            rsc = psc.executeQuery();
              while (rsc.next()) {
                contaComSaldo.setConCodigo(rsc.getInt("concodigo"));
                contaComSaldo.setConDescricao(rsc.getString("condescricao"));
                contaComSaldo.setTipoCodigo(rsc.getInt("tipocodigo"));
                contaComSaldo.setConSaldo(rsc.getDouble("consaldo"));
              }
        } catch (Exception e) {
            Logger.getLogger(CreditoDAO.class.getName()).log(Level.SEVERE, null, e);
        }
        //if(contaComSaldo!= null){
          //  System.out.println("Objeto conta:"+ contaComSaldo.getConDescricao() );
            //System.out.println("Saldo conta :" + contaComSaldo.getConSaldo() );

        //}

        String sql = "insert into creditos (credata,concodigo,crevalor,crehistorico,consaldo) values (?,?,?,?,?)";
        PreparedStatement ps = null;
        ResultSet rs = null;
        
        //contas.setConSaldo(contas.getConSaldo() + creditos.getCreValor());
        try {
            ps = connection.prepareStatement(sql);
            ps.setDate(1, new java.sql.Date(creditos.getCreData().getTime()));
            ps.setInt(2, creditos.getConCodigo());
            ps.setDouble(3, creditos.getCreValor());
            ps.setString(4, creditos.getCreHistorico());
            ps.setDouble(5, creditos.getConSaldo());
            ps.execute();
        } catch (SQLException ex) {
            Logger.getLogger(CreditoDAO.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            //connection.close();
            ps.close();
        }
        if(creditos != null){
            double saldo = 0;
            saldo = contaComSaldo.getConSaldo() + creditos.getCreValor();
            //contaComSaldo.setConSaldo(saldo); isto funciona mas não atualiza o valor no BD
            //System.out.println("Objeto conta:"+ contaComSaldo.getConSaldo());
        }
        String sqlas = "update contas set consaldo=? where concodigo=?";
        PreparedStatement psas = null;

        try {
            psas = connection.prepareStatement(sqlas);
            psas.setDouble(1, contaComSaldo.getConSaldo());//Quero atualizar este valor no BD e não consigo
            psas.setInt(2, contaComSaldo.getConCodigo());
            psas.execute();
        } catch (SQLException ex) {
            Logger.getLogger(ContaDAO.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            connection.close();
            ps.close();
        }
    }
}

Alguém pode me ajudar?

Bom primeiro, vamos fazer uma refatoração ai né, porque esse método ta com muita responsabilidade.
“Estou tentando atualizar um valor na tabela do BD e não estou conseguindo”, o que é não conseguir ?
Exception ? O que acontece no seu método ?
Já executou em debug pra ver o valor desse getConSaldo() ?

Vou dar uma dica de boa prática, acredito que o correto seria você separar todo o seu código para que ele fique dividido em blocos menores, o que tende a facilitar no desenvolvimento e entendimento do seu código, não só por você mas também por outra pessoa que venha a olhar o seu código, pois dessa maneira se perde muito menos tempo raciocinando o funcionamento do código, e ajuda muito também em casos de manutenções posteriores.

Divida a sua DAO com métodos únicos e separados como por exemplo

public void incluirDados(){};

public void atualizarDados(){};

public void deletarDados(){};

public void consultaDados(){};

Seguindo esse padrão de ideia acredito que te ajudará tanto agora do desenvolvimento como futuramente também, pois facilitará o encontro de erros no código!

Olá Jonathan_Medeiros!

A DAO está com este métodos criados, mas neste código ou neste tipo de sistema não existe exclusão e nem alteração de lançamentos, uma vez efetuado o lançamento e este lançamento estiver sido feito de forma incorreta, deverá ser feito um estorno (nunca uma alteração ou exclusão de lançamentos efetuados). Onde feito feito um credito de forma incorreta, deverá feito um débito para corrigir o lançamento feito incorretamente.
Neste sistema tem o contaDAO, tipoDAO, usuarioDAO, onde estes objetos podem ser feitas alterações e ou exclusões.

1 curtida

Olá igomes!

Isto é porque em um único lançamento deve ser feito tudo isto que está na classe.
Este trecho de codigo faz parcialmente o que quero, digo parcialmente porque ele não atualiza o saldo da conta no BD:
//saldo = contaComSaldo.getConSaldo() + creditos.getCreValor();
//contaComSaldo.setConSaldo(saldo); isto funciona mas não atualiza o valor no BD

Fiz uma alteração no metodo para vocês entenderem o que desejo fazer:

public void novaCredito(Creditos creditos,String conCodigo,Contas contaComSaldo, String creValor, String conSaldo) throws SQLException { //Acrescentei dois parametros

//Fiz esta alteração abaixo
double saldo = 0;
if(creditos != null){

        saldo = Double.parseDouble(conSaldo) + Double.parseDouble(creValor);
        //contaComSaldo.setConSaldo(saldo);
        //System.out.println("Objeto conta:"+ contaComSaldo.getConSaldo());
    }

String sqlas = “update contas set condescricao=?,tipocodigo=?,consaldo=”+saldo+" where concodigo=?";
PreparedStatement psas = null;

    try {
        psas = connection.prepareStatement(sqlas);
        psas.setString(1, contaComSaldo.getConDescricao());
        psas.setInt(2, contaComSaldo.getTipoCodigo());
        psas.setDouble(3, contaComSaldo.getConSaldo());
        //psas.setInt(4, contaComSaldo.getConCodigo());
        psas.execute();
    } catch (SQLException ex) {
        Logger.getLogger(ContaDAO.class.getName()).log(Level.SEVERE, null, ex);
    } finally {
        connection.close();
        ps.close();
    }

Mas o log do netbeans me mostra o seguinte erro:
Out 05, 2016 8:45:33 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet LancamentoCRUD threw exception
java.lang.NullPointerException
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1008)
at java.lang.Double.parseDouble(Double.java:540)
at br.com.jairo.dao.CreditoDAO.novaCredito(CreditoDAO.java:77)
at br.com.jairo.controle.LancamentoCRUD.processRequest(LancamentoCRUD.java:101)
at br.com.jairo.controle.LancamentoCRUD.doPost(LancamentoCRUD.java:141)

Fiz uma alteração no metodo para vocês entenderem o que desejo fazer:

public void novaCredito(Creditos creditos,String conCodigo,Contas contaComSaldo, String creValor, String conSaldo) throws SQLException { //Acrescentei dois parametros

//Fiz esta alteração abaixo
double saldo = 0;
if(creditos != null){

        saldo = Double.parseDouble(conSaldo) + Double.parseDouble(creValor);
        //contaComSaldo.setConSaldo(saldo);
        //System.out.println("Objeto conta:"+ contaComSaldo.getConSaldo());
    }

String sqlas = “update contas set condescricao=?,tipocodigo=?,consaldo=”+saldo+" where concodigo=?";
PreparedStatement psas = null;

    try {
        psas = connection.prepareStatement(sqlas);
        psas.setString(1, contaComSaldo.getConDescricao());
        psas.setInt(2, contaComSaldo.getTipoCodigo());
        psas.setDouble(3, contaComSaldo.getConSaldo());
        //psas.setInt(4, contaComSaldo.getConCodigo());
        psas.execute();
    } catch (SQLException ex) {
        Logger.getLogger(ContaDAO.class.getName()).log(Level.SEVERE, null, ex);
    } finally {
        connection.close();
        ps.close();
    }

O log do netbeans me mostra o seguinte erro:
Out 05, 2016 8:45:33 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet LancamentoCRUD threw exception
java.lang.NullPointerException
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1008)
at java.lang.Double.parseDouble(Double.java:540)
at br.com.jairo.dao.CreditoDAO.novaCredito(CreditoDAO.java:77)
at br.com.jairo.controle.LancamentoCRUD.processRequest(LancamentoCRUD.java:101)
at br.com.jairo.controle.LancamentoCRUD.doPost(LancamentoCRUD.java:141)

Tá dando parse em nulo aparentemente, vê qual linha é essa e debuga