Atualizar Saldo

9 respostas
java
jairodione

Olá Pessoal!

Gostaria de atualizar o atributo consaldo na tabela contas com o código descrito abaixo:

/*double saldo = 0;
    if(creditos != null){
        
        saldo = Double.parseDouble(conSaldo) + Double.parseDouble(creValor); **Gostaria de pagar o valor da variavel "saldo" e atualizar o atributo consaldo na tabelas de contas.**
        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(CreditoDAO.class.getName()).log(Level.SEVERE, null, ex);
    } finally {
        connection.close();
        ps.close();
    }*/

9 Respostas

peczenyj

qual a sua dificuldade? pq vc não usa?

jairodione

Olá peczenyj!

Minha dificuldade é não conseguir atualizar o atributo consaldo com o valor da variável saldo:

Quero pegar este valor -> saldo = Double.parseDouble(conSaldo) + Double.parseDouble(creValor);
E colocar aqui -> String sqlas = “update contas set condescricao=?,tipocodigo=?,consaldo=”+saldo+"

Deu para entender?

igomes

Voce ja esta fazendo isso

saldo = Double.parseDouble(conSaldo) + Double.parseDouble(creValor); Gostaria de pagar o valor da variavel “saldo” e atualizar o atributo consaldo na tabelas de contas.
contaComSaldo.setConSaldo(saldo);

Poe um breakpoint na linha do saldo, e ve se o mesmo esta indo para esse objeto contaComSaldo

E vc tem um if ali em cima certo ? sabe se ele está entrando ?

jairodione

Olá igomes!

Ele entra no if sim, o valor da variável saldo fica correto, como é para ser, mas não consigo pegar o valor desta variável e atualizar a atributo consaldo na tabela contas. Eu consigo colocar o valor da variável na tabela movimentos que fiz para poder criar o relatório extrato da conta. Mas não ficaria correto porque não consigo atualizar o atributo consaldo na tabela contas com o valor desta variável saldo.

j-menezes

Neste caso coloque ? tambem no consaldo
String sqlas = “update contas set condescricao=?,tipocodigo=?,consaldo=? where concodigo=?”;

Cada ? equivale a um numero

psas = connection.prepareStatement(sqlas); // O parser Jdbc neste metodo troca ? de acordo com o numero

psas.setString(1, contaComSaldo.getConDescricao());

psas.setInt(2, contaComSaldo.getTipoCodigo());

psas.setDouble(3, contaComSaldo.getConSaldo());

psas.setInt(4, contaComSaldo.getConCodigo());

psas.execute();
jairodione

Olá j-menezes!

Não funcionou, ele efetua os lançamentos na tabela de movimento, tabela de creditos, e tabela de debitos, mas não atualiza o saldo na tabela contas!

jairodione

Olá Pessoal!

Consegui solucionar, opa quero dizer conseguimos, pois tive a ajuda de dois outros programadores; Rosenvelty Brasil e Igor Carmo. O servlet ficou da seguinte forma:

/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */
    package br.com.jairo.controle;
import br.com.jairo.dao.ContaDAO;

import br.com.jairo.dao.CreditoDAO;

import br.com.jairo.dao.MovimentoDAO;

import br.com.jairo.modelo.Contas;

import br.com.jairo.modelo.Creditos;

import br.com.jairo.modelo.Movimentos;

import java.io.IOException;

import java.io.PrintWriter;

import java.sql.SQLException;

import java.text.DateFormat;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.logging.Level;

import java.util.logging.Logger;

import javax.servlet.RequestDispatcher;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

/**
*

  • @author Jairo
    */
    public class LancamentoCRUD extends HttpServlet {

    /**

    • Processes requests for both HTTP GET and POST methods.

    • @param request servlet request

    • @param response servlet response

    • @throws ServletException if a servlet-specific error occurs

    • @throws IOException if an I/O error occurs
      
      */
      
      protected void processRequest(HttpServletRequest request, HttpServletResponse response)
      
      throws ServletException, IOException, ParseException, SQLException {
      
      response.setContentType(text/html;charset=UTF-8);
      
      PrintWriter out = response.getWriter();
      
      RequestDispatcher rd = null;
      
      String creCodigo = request.getParameter(crecodigo);
      
      String creData = request.getParameter(credata);
      
      String conCodigo = request.getParameter(concodigo);
      
      String creValor = request.getParameter(crevalor);
      
      String creHistorico = request.getParameter(crehistorico);
      
      String conSaldo = request.getParameter(consaldo);
      
      Creditos creditos = new Creditos();
      
      Contas contas = new Contas();
      
      Movimentos movimentos = new Movimentos();
      
      if (creCodigo != null) {
      
      creditos.setCreCodigo(Integer.parseInt(creCodigo));
      
      }
      
      DateFormat formatoData = new SimpleDateFormat(dd/MM/yyyy);
      
      if (creData != null) {
      
      Date creDataFormatada = formatoData.parse(creData);
      
      creditos.setCreData(creDataFormatada);
      
      }
      
      if (conCodigo != null) {
      
      creditos.setConCodigo(Integer.parseInt(conCodigo));
      
      }
      
      if (creValor != null) {
      
      creditos.setCreValor(Double.parseDouble(creValor));
      
      }
      
      creditos.setCreHistorico(creHistorico);
      
      if(conSaldo != null){
      
      contas.setConSaldo(Double.parseDouble(conSaldo));
      
      }
      
      CreditoDAO creditoDAO = new CreditoDAO();
      
      MovimentoDAO movimentoDAO = new MovimentoDAO();
      
      ContaDAO contaDAO = new ContaDAO();
      

      contas = contaDAO.buscarConta(Integer.parseInt(conCodigo));
      // Testar se existe conta, mostrar mensagem de erro caso não exista

      //Verificar qual é a ação
      String acao = request.getParameter(“acao”);

      if (acao == null) {
      
      acao = listarCredito;
      
      }
      
      if (acao.equals(alterar)) {
      
      <a href="//contaDAO.alteraConta">//contaDAO.alteraConta</a>(contas);
      
      //rd = request.getRequestDispatcher("/ContaCRUD?acao=listarConta");
      
      } else if (acao.equals(excluir)) {
      
      <a href="//contaDAO.excluiConta">//contaDAO.excluiConta</a>(contas);
      
      //rd = request.getRequestDispatcher("/ContaCRUD?acao=listarConta");
      
      } //else if (acao.equals(“listarConta”)) {
      
      //int numPagina = 1;
      
      //if (request.getParameter(“numpagina”) != null) {
      
      //numPagina = Integer.parseInt(request.getParameter(“numpagina”));
      
      //}
      
      else if (acao.equals(novo)) {
      
      Contas contaComSaldo = new Contas();
      
      creditoDAO.novaCredito(creditos,conCodigo,contaComSaldo);
      
      movimentoDAO.novoMovimentoCredito(movimentos, creditos,contas,contaComSaldo);
       double novo_saldo = contaDAO.atualizaSaldo(contas, creditos.getCreValor());
       //contaDAO.getContaSaldo();
       rd = request.getRequestDispatcher("/debito.jsp");
      

      }

      rd.forward(request, response);
      } //

    /**

    • Handles the HTTP GET method.
    • @param request servlet request
    • @param response servlet response
    • @throws ServletException if a servlet-specific error occurs
    • @throws IOException if an I/O error occurs
      */
      @Override
      protected void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      try {
      processRequest(request, response);
      } catch (ParseException ex) {
      Logger.getLogger(LancamentoCRUD.class.getName()).log(Level.SEVERE, null, ex);
      } catch (SQLException ex) {
      Logger.getLogger(LancamentoCRUD.class.getName()).log(Level.SEVERE, null, ex);
      }
      }

    /**

    • Handles the HTTP POST method.
    • @param request servlet request
    • @param response servlet response
    • @throws ServletException if a servlet-specific error occurs
    • @throws IOException if an I/O error occurs
      */
      @Override
      protected void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      try {
      processRequest(request, response);
      } catch (ParseException ex) {
      Logger.getLogger(LancamentoCRUD.class.getName()).log(Level.SEVERE, null, ex);
      } catch (SQLException ex) {
      Logger.getLogger(LancamentoCRUD.class.getName()).log(Level.SEVERE, null, ex);
      }
      }

    /**

    • Returns a short description of the servlet.
    • @return a String containing servlet description
      */
      @Override
      public String getServletInfo() {
      return “Short description”;
      }//
      }

O DAO ficou da seguinte forma:

/*

  • 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 java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;

import java.util.logging.Level;

import java.util.logging.Logger;

/**
*

  • @author Jairo
    */
    public class ContaDAO {

    private double salAntCre = 0;
    private Connection connection;

    public ContaDAO() {
    
    this.connection = new FabricaConexao().getConnection();
    
    }
    
    private Connection getConnection() throws SQLException {
    
    if (connection == null || connection.isClosed()) {
    
    this.connection = new FabricaConexao().getConnection();
    
    }
    
    return this.connection;
    
    }
    
    //exibe contas cadastradas no sistema, paginado
    
    public List getListaContaPaginado(int pagina, String ordenacao, String pesquisa, String campopesquisa) throws SQLException {
    
    int limite = 5;
    
    String sql = “”;
    
    int offset = (pagina * limite) - limite;
    
    if (campopesquisa.equals(tipocodigo)) {
    
    if (pesquisa.equals("")) {
    
    sql = "select * from contas where " + campopesquisa + " > 0 order by " + ordenacao + " LIMIT 5 OFFSET " + offset;
    
    } else {
    
    sql = "select * from contas where " + campopesquisa + " = " + pesquisa + " order by " + ordenacao + " LIMIT 5 OFFSET " + offset;
    
    }
    
    } else {
    
    sql = select * from contas where " + campopesquisa + " like '% + pesquisa + "%’ order by " + ordenacao + " LIMIT 5 OFFSET " + offset;
    
    }
    
    PreparedStatement ps = null;
     ResultSet rs = null;
     List<Contas> listaContas = new ArrayList<Contas>();
     try {
         ps = connection.prepareStatement(sql);
         rs = ps.executeQuery();
         while (rs.next()) {
             Contas contas = new Contas();
             contas.setConCodigo(rs.getInt("conCodigo"));
             contas.setConDescricao(rs.getString("conDescricao"));
             contas.setTipoCodigo(rs.getInt("tipocodigo"));
             contas.setConSaldo(rs.getDouble("conSaldo"));
             listaContas.add(contas);
         }
         return listaContas;
     } catch (SQLException erro) {
         Logger.getLogger(ContaDAO.class.getName()).log(Level.SEVERE, null, erro);
     } finally {
         //connection.close();
         //ps.close();
         //rs.close();
     }
     return null;
    

    }

    //lista contas cadastradas no sistema
    
    public List getListaContaCombo() throws SQLException {
    
    String sql = select * from contas order by condescricao;
    
    PreparedStatement ps = null;
     ResultSet rs = null;
     List<Contas> listaContas = new ArrayList<Contas>();
     try {
         ps = connection.prepareStatement(sql);
         rs = ps.executeQuery();
         while (rs.next()) {
             Contas contas = new Contas();
             contas.setConCodigo(rs.getInt("conCodigo"));
             contas.setConDescricao(rs.getString("conDescricao"));
             contas.setConSaldo(rs.getDouble("conSaldo"));
             listaContas.add(contas);
         }
         return listaContas;
     } catch (SQLException erro) {
         Logger.getLogger(ContaDAO.class.getName()).log(Level.SEVERE, null, erro);
     } finally {
         //connection.close();
         //ps.close();
         //rs.close();
     }
     return null;
    

    }

    //lista contas cadastradas no sistema com saldo
    
    public List getListaContaSaldo() throws SQLException {
    
    String sql = select * from contas;
    
    PreparedStatement ps = null;
     ResultSet rs = null;
     List<Contas> listaContas = new ArrayList<Contas>();
    
     try {
         ps = connection.prepareStatement(sql);
         rs = ps.executeQuery();
         while (rs.next()) {
             Contas contas = new Contas();
             contas.setConCodigo(rs.getInt("concodigo"));
             contas.setConDescricao(rs.getString("condescricao"));
             contas.setTipoCodigo(rs.getInt("tipocodigo"));
             contas.setConSaldo(rs.getDouble("consaldo"));
             listaContas.add(contas);
             System.out.println("Nome: " + contas.getConDescricao() + " Saldo: " + contas.getConSaldo());
         }
         return listaContas;
     } catch (SQLException erro) {
         Logger.getLogger(ContaDAO.class.getName()).log(Level.SEVERE, null, erro);
     } finally {
         //connection.close();
         //ps.close();
         //rs.close();
     }
     return null;
    

    }

    //metodo que retorna saldo da conta
    
    public void getContaSaldo() throws SQLException {
    
    String sql = select consaldo from contas where concodigo=?”;
    
    PreparedStatement ps = null;
     ResultSet rs = null;
    
     try {
         ps = connection.prepareStatement(sql);
         rs = ps.executeQuery();
    
         Contas contas = new Contas();
         contas.setConCodigo(rs.getInt("concodigo"));
         contas.setConSaldo(rs.getDouble("consaldo"));
    
         System.out.println(" Saldo: " + contas.getConSaldo());
    
    
     } catch (SQLException erro) {
         Logger.getLogger(ContaDAO.class.getName()).log(Level.SEVERE, null, erro);
     } finally {
         //connection.close();
         //ps.close();
         //rs.close();
     }
    

    }

    //metodo para excluir conta
    
    public boolean excluiConta(Contas contas) throws SQLException {
    
    String sql = delete from contas where concodigo=?”;
    
    PreparedStatement ps = null;
    
    try {
    
    ps = connection.prepareStatement(sql);
    
    ps.setInt(1, contas.getConCodigo());
    
    ps.execute();
    
    return true;
    
    } catch (SQLException ex) {
    
    Logger.getLogger(ContaDAO.class.getName()).log(Level.SEVERE, null, ex);
    
    } finally {
    
    connection.close();
    
    ps.close();
    
    }
    
    return false;
    
    }
    
    //metodo para atualizar conta
    
    public void alteraConta(Contas contas) throws SQLException {
    
    String sql = update contas set condescricao=?,tipocodigo=?,consaldo=? where concodigo=?”;
    
    PreparedStatement ps = null;
    
    try {
    
    ps = connection.prepareStatement(sql);
    
    ps.setString(1, contas.getConDescricao());
    
    ps.setInt(2, contas.getTipoCodigo());
    
    ps.setDouble(3, contas.getConSaldo());
    
    ps.setInt(4, contas.getConCodigo());
    
    ps.execute();
    
    } catch (SQLException ex) {
    
    Logger.getLogger(ContaDAO.class.getName()).log(Level.SEVERE, null, ex);
    
    } finally {
    
    connection.close();
    
    ps.close();
    
    }
    
    }
    
    //metodo para incluir conta
    
    public void novaConta(Contas contas) throws SQLException {
    
    String sql = insert into contas (condescricao,tipocodigo,consaldo) values (?,?,?);
    
    PreparedStatement ps = null;
    
    try {
    
    ps = connection.prepareStatement(sql);
    
    ps.setString(1, contas.getConDescricao());
    
    ps.setInt(2, contas.getTipoCodigo());
    
    ps.setDouble(3, contas.getConSaldo());
    
    ps.execute();
    
    } catch (SQLException ex) {
    
    Logger.getLogger(ContaDAO.class.getName()).log(Level.SEVERE, null, ex);
    
    } finally {
    
    connection.close();
    
    ps.close();
    
    }
    
    }
    
    //metodo para retornar o numero de registros na paginação
    
    public String totalRegistros(String pesquisa, String campopesquisa) throws SQLException {
    
    PreparedStatement psConta = null;
    
    ResultSet rsConta = null;
    
    String sqlConta = “”;
    
    try {
    
    if (campopesquisa.equals(“concodigo”)) {
    
    if (pesquisa.equals("")) {
    
    sqlConta = "select count(<em>) as contaRegistros from contas where " + campopesquisa + " > 0";
    
    } else {
    
    sqlConta = "select count(</em>) as contaRegistros from contas where " + campopesquisa + " = " + pesquisa;
    
    }
    
    } else {
    
    sqlConta = “select count(*) as contaRegistros from contas where " + campopesquisa + " like '%” + pesquisa + “%’”;
    
    }
    
    psConta = connection.prepareStatement(sqlConta);
    
    rsConta = psConta.executeQuery();
    
    rsConta.next();
    
    String qtdTotalRegistros = rsConta.getString(“contaRegistros”);
    
    return qtdTotalRegistros;
    
    } catch (SQLException ex) {
    
    Logger.getLogger(ContaDAO.class.getName()).log(Level.SEVERE, null, ex);
    
    } finally {
    
    connection.close();
    
    psConta.close();
    
    rsConta.close();
    
    }
    
    return null;
    
    }
    

    public double pegaSaldoContaCre() {

    Contas contas = new Contas();
     salAntCre = contas.getConSaldo();
     System.out.println(salAntCre);
     return salAntCre;
    

    }

    public double atualizaSaldo(Contas conta, double valor) {
    PreparedStatement psConta = null;

    // alteração do saldo da conta no objeto
     conta.setConSaldo(conta.getConSaldo() + valor);
     //System.out.println(conta);
    
     String sqlConta = "update contas set consaldo = ? where concodigo = ?";
     try {
         // pega conexão
         connection = getConnection();
         // alteração do saldo da conta no banco
         psConta = connection.prepareStatement(sqlConta);
         psConta.setDouble(1, conta.getConSaldo());
         psConta.setInt(2, conta.getConCodigo());
         psConta.execute();
         connection.commit();
     } catch (SQLException ex) {
         Logger.getLogger(ContaDAO.class.getName()).log(Level.SEVERE, null, ex);
         try {
             connection.rollback();
         } catch (SQLException ex1) {
             Logger.getLogger(ContaDAO.class.getName()).log(Level.SEVERE, null, ex1);
         }
     } finally {
         try {
             psConta.close();
             if (!connection.isClosed()) {
                 connection.close();
             }
         } catch (SQLException ex) {
             Logger.getLogger(ContaDAO.class.getName()).log(Level.SEVERE, null, ex);
         }
     }
     return conta.getConSaldo();
    

    }

    public Contas buscarConta(int concodigo) {
    
    PreparedStatement psConta = null;
    
    ResultSet rsConta = null;
    
    String sqlConta = "select * from contas where concodigo = ? limit 1";
     try {
         // alteração do saldo da conta no banco
         psConta = connection.prepareStatement(sqlConta);
         psConta.setInt(1, concodigo);
         rsConta = psConta.executeQuery();
    
         Contas conta = new Contas();
         if (rsConta.next()) {
             conta.setConCodigo(rsConta.getInt("concodigo"));
             conta.setConDescricao(rsConta.getString("condescricao"));
             conta.setConSaldo(rsConta.getDouble("consaldo"));
             conta.setTipoCodigo(rsConta.getInt("tipocodigo"));
             return conta;
         }
         
         return null;
     } catch (SQLException ex) {
         Logger.getLogger(ContaDAO.class.getName()).log(Level.SEVERE, null, ex);
         return null;
     } finally {
         try {
             psConta.close();
             connection.close();
         } catch (SQLException ex) {
             Logger.getLogger(ContaDAO.class.getName()).log(Level.SEVERE, null, ex);
         }
     }
    

    }
    }

peczenyj

amigão estamos em 2016… concatena strings pra gerar sql não… faz um PreparedStatement ai.

jairodione

Olá peczenyj!

É verdade estamos em 2016, e estou desde 2010 sem programar nada, então peguei este projeto e estou fazendo da forma que aprendi a programar!! Um dos que me ajudaram a resolver o problema me disse que o projeto está sem as boas praticas de desenvolvimento (hibernate, alguns frameworks e etc).
Irei atualizar este sistema com tudo isto que vocês estão me indicando e orientando a fazer, mas somente após o projeto terminado e entregue ao proprietário. O prazo de entrega é agora 11/2016 e falta criar as permissões de usuários e relatórios (extrato).
Valeu!!!

Criado 8 de outubro de 2016
Ultima resposta 17 de out. de 2016
Respostas 9
Participantes 4