Contador + Atualizar no BD

8 respostas
gtesu

Oii, eu queria saber como faço para que, quando clicasse num botão, ele somasse +1 no banco e atualizasse no site.

Explicando melhor, eu tenho uma página de uma oferta e o botão de comprar. Quando a pessoa clica em comprar, carrega uma nova página com o produto que ela ‘comprou’ e o botão de finalizar a compra. Quando clicarem no botão de finalizar, soma +1 no banco, volta para a página da oferta e já aparece atualizado: x vendidas.

Desde já, agradeço :))

8 Respostas

tek

Boa noite,

Se essa quantidade é de itens do consumidor(normal) ou do total de compra indiferente do consumidor (o que acho meio bagaceiro de fazer) é só fazer um sum na tabela de itens

Acesse: www.tiagoek.com.br

gtesu

tek:
Boa noite,

Se essa quantidade é de itens do consumidor(normal) ou do total de compra indiferente do consumidor (o que acho meio bagaceiro de fazer) é só fazer um sum na tabela de itens

Acesse: www.tiagoek.com.br

É como se fosse um site de compras coletivas. Onde diz o total de pessoas que já compraram.
Mas como vou fazer um SUM se a quantidade de compras se inicia com 0 e eu não sei como faço para adicionar +1 na coluna de qtdvendidas quando clica num botão de uma página .jsp?? :confused:

tek

Quando você clima no botão já é gravado a compra.

Portanto quando você precisa apresentar você faz o seguinte.

Sempre vai estar atualizado.

select sum(quantidades) from itensComprados where codProduto='010010101001'

não precisa colocar + 1 pois o somatório já vai estar atualizado.

fernandopaiva

Tem varias maneiras de se fazer isso…Vou colocar 2 aqui para vc sacar a ideia.

Imagino que vc tenha uma tabela onde guarda os clicks do mouse, se naum tem a crie.

vou colocar o nome dela aqui pra ilustrar de tabelaContador que possui 2 campos: codigo e data, usando o MySQL coloco isso com o tipo BIGINT para o codigo e autoincremento. Data pode ser tanto date, datetime, varchar, char vc quem sabe, pois ele vai servir apenas para inserir algo no banco e assim criar um novo registro.

Primeiro a classe de conexao

//classe de conexao com MySQL
public class Conexao{
    public static Connection getConnection() throws SQLException{
        try {
             Class.forName("com.mysql.jdbc.Driver");                             
             return DriverManager.getConnection("jdbc:mysql://xxx.xxx.xxx.xxx/bancodedados?user=root&password=root");                         
        } catch (ClassNotFoundException e) {
            JOptionPane.showMessageDialog(null, e.getMessage());            
            throw new SQLException();            
        }
        
    } 
    
}

Aqui como seria com autoincremento, maneira mais facil de se fazer pois o proprio banco quem se encarrega de somar.

public class Contador{
    private Connection con;
    Contador() throws SQLException{
        this.con = Conexao.getConnection();
    }

    public Integer retornaQuantidadeAcesso() throws SQLException{
           //este metodo retorna a quantidade de acesso que seria o codigo de autoincremento no banco
           int contador = 0;
           PreparedStatement stm = this.con.prepareStatement("SELECT MAX(codigo) AS qtdAcesso FROM tabelaContador"); //aqui vai sempre trazer o ultimo codigo
           ResultSet rs = stm.executeQuery();
           rs.next();
           contador = rs.getInt("qtdAcesso"); //aqui se estiver como autoincremento vc ja vai ter o codigo do ultimo acesso, sendo assim q qtde de acesso
           return contador;
           rs.close();
           stm.close();
    }
    
    public void insereDataContador() throws SQLException{
         //este metodo insere um novo registro
         PreparedStatement stm = this.con.prepareStatement("INSERT INTO tabelaContador (data) VALUES (?)");
         stm.setString(1, Calendar.getInstance().getTimeInMillis());
         stm.executeUpdate();
         stm.close();  
    }
}

Para autoincremento seria isso…Agora vou fazer fazer o exemplo sem autoincremento. Lembrando q a maneira mais correta seria usando autoincremento.

public Integer retornaQuantidadeAcesso() throws SQLException{
           //este metodo retorna a quantidade de acesso que seria o codigo de autoincremento no banco
           int contador = 0;
           PreparedStatement stm = this.con.prepareStatement("SELECT MAX(codigo) AS qtdAcesso FROM tabelaContador"); //aqui vai sempre trazer o ultimo codigo
           ResultSet rs = stm.executeQuery();
           rs.next();
           contador = rs.getInt("qtdAcesso") + 1;  //aqui vc ja faz a soma e referencia a variavel primitiva contador.
           return contador;
           rs.close();
           stm.close();
    }

Agora basta colocar nos eventos corretos, que ja eh 100% funcional. Para autoincremento vc pode mandar Inserir e depois retornar o ultimo codigo. Sem autoincremento vc pode Consultar e depois inserir …ai vai da maneira como vc preferir.

Novamente eu digo, náo concatene Strings SQL…Use PreparedStatement.

t+ e boa sorte.

gtesu

Aii, muito obrigada!!

Agora só to com dificuldades em como fazer com que eu chame o retornaQuantidadeAcesso() quando a pessoa clicar em ‘finalizar compra’!
Seria no form action?

O código do botão está assim:

<form method="post"  action="index.jsp"><input type="image" src="site/img/finalizar_pedido.png" class="btn_finalizar" id="btn_finalizar" /></form>

Eu ainda tenho que adicionar esse método no filtro ou não precisa? Já que no filtro ele lista os campos da tabela ofertas e o qtdacessos está na tabela oferta.

Desde já agradeço :]

EduFranzoni

você está utilizando jsp?

se sim, crie um mode com o método dentro por exemplo.

try
    {
        if (mode != null && mode.equals("meuMode"))
        {
           // faz o que o método tem que fazer
         }
}catch(Exception e)
{

}

e no seu action do form você chama o mode.

<form method="post"  action="index.jsp?mode=meuMode"><input type="image" src="site/img/finalizar_pedido.png" class="btn_finalizar" id="btn_finalizar" /></form>
gtesu

Não entendi essa parte do mode ://

EduFranzoni

posta seu codigo.

o index.jsp e o método e sua respectiva classe.

mas basicamente funciona como se fosse uma outra pagina, que vai ser acionada qndo vc ativar o form.

p/ isso vc precisa separar seu codigo em varios mode’s.

Por exemplo:
o seu index.asp (pagina inicial)
deve estar dentro do mode==null.

Criado 25 de setembro de 2011
Ultima resposta 28 de set. de 2011
Respostas 8
Participantes 4