[RESOLVIDO] Ajuda Java

20 respostas Resolvido
programaçãojava
P

Ola, Boa Tarde.

Estou a fazer o meu tcc, sobre cantina e um dos meus problemas é sobre marcar vamos ao exemplo para entenderem.

Ex: Joãozinho foi la e comprou um produto na cantina ai, ai ele tem conta ai ele tem que marcar tipo

Ex: Produto 1 - 10 Reais
Ai ele marca na conta do Joãozinho .

MarcarProd

Na hora que ele pesquisar vai preencher todos os campos ai ele coloca somente o valor
e Clique em marcar onde vai colocar no banco de dados somente o valor e quanto mas ele for marcando vai somando oque ja esta no banco de dados com o que ele vai colocar

20 Respostas

R

E?
Veio apenas anunciar seu tcc ou existe alguma dúvida nisso?

P

A Duvida é que não consigo fazer

Clique em marcar onde vai colocar no banco de dados somente o valor e quanto mas ele for marcando vai somando oque ja esta no banco de dados com o que ele vai colocar

R

Todo resultado de um programa é oriundo de um algoritmo, sem ver seu código, como quer que lhe ajudemos?
Nem todo mundo tem bola de cristal.

P

https://pastebin.com/weNbY3vD - Classe Marcar
https://pastebin.com/3PqEppeF - Classe MarcarDAO
MySQL - MySQL

P

Se puder pelo menos me enviar um video agredeço

R

Só um vídeo? n quer quase nada. É um problema específico doq vc criou, como quer um vídeo q resolva isso? precisará detalhar tecnicamente oq se passa.

Nem entendi seu problema, n sei qual foi o português que usou nesta frase mas n ajudou nada entendimento.
E acredito q outros tbm n entenderam pq n tem respostas.

A regra básica é mto simples: se dá erro, vc começa pelo stacktrace, classe, linha, exceção, ou posta ele. Não dando erro o problema é da sua lógica, logo, se sabe escrever um código java, DEBUGANDO poderás resolver.

D

Entendi que deseja inserir se não existir ou atualizar o registro, então o problema está no sql:

"UPDATE contas SET (nomealuno,nomepai,telefonepai,devendo) values (?,?,?,?)"

Se for isso, eu não sei resolver.

R

Acho que entendi. Você vai precisar fazer assim:

Vai adicionando todos os valores com o “Insert into blablabla”. Aí na hora de puxar, você vai usar um campo de pesquisa.

Vai fazer assim “SELECT SUM(1) as total
FROM suaTabela WHERE '”+campopesquisar.getText()+"’ "

No MySQL não se usa o ilike, e eu não lembro qual é a query, dá uma pesquisada por aí que vc encontra.

Nesse meu exemplo aí, o “Joãozinho” vai ter mil valores, mas no final vai puxar a soma toda de tudo conforme o nome dele.

Um vídeo falando sobre como puxar dados do banco de dados pra o seu form: https://youtu.be/gDOxpJ_kjEw

P

É mais o menos isso. Só que oque eu quero fazer é assim.

Uma pessoa comprou 10 Reais e ela tem conta comigo. Vamos supor que ela já esteja devendo 200 Reais , esses 200 vai estar no banco de dados salvo , quando ela clicar no botão Marcar vai pegar o valor do jTextField somar com oque está no banco de dados e atualizar com valor que já estava então ficaria lá 210

R

Usa o update então

D

Você tem duas maneiras de fazer: a boa e a péssima.
A péssima é do jeito que você pensou e quer fazer.
Porém, já considerou a hipótese do cliente cancelar algo? Ok, é apenas um DELETE que precisará ser rodado. Porém, não é uma solução inteligente.
A boa é manter os dados em memória mesmo (eu acredito que num mapa de lista, onde a chave é o nome/código do cliente e o valor é a lista de itens que ele pediu).
Quando o cliente for pagar, você recupera a tal lista, a partir do identificador do cliente e, então, após processar a venda, salva tudo no banco de dados, com informações já consolidadas.

R

Adicionar um por um mesmo? Por ID?

D

em que sentido você se refere a adicionar um por um?

R

O Joãozinho comprou uma bala, gerou uma venda com o ID 1

No outro dia ele comprou outra coisa, gerou uma venda com o ID 2

Um item separadamente, aí pra buscar faz a soma

D

Não, não, muito dispendioso.
Melhor criar um mapa, onde todas as vendas, de todos os clientes, são armazenadas, cada qual em uma List, onde você vai adicionando elementos.
Pensa no seguinte cenário: João compra 1 bala de R$ 0,10. Depois, compra mais 2 pirulitos de R$ 0,50, depois compra mais 1 bala de R$ 0,10 e depois compra um refrigerante de R$ 4. Aí ele se arrepende e devolve um pirulito de R$ 0,50.
Você vai fazer inúmeros inserts à toa. Além de ter que fazer um DELETE e, no final, fazer um novo insert.
Faz tudo em memória primeiro, após consolidar, processa as informações e grava o que precisa no banco de dados.

R

Entendi, valeu.

D
Solucao aceita

Só para deixar mais claro.
Vamos considerar que você entregue uma comanda a cada cliente e a comanda tenha um código numérico. Logo, o mapa terá a chave numérica.
O valor associado à chave deve ser uma List, pois permite inclusão de itens repetidos.

Map<Integer, List<Item>> pedidos = new HashMap<>();

Para cada nova comanda, cria-se um mapa

public void criaComanda(Integer codigo) {
    if(!pedidos.containsKey(codigo)){
        List<Item> itens = new ArrayList<Item>();
        pedidos.put(codigo, itens);
    }
}

E, para adicionar itens:

public void insereItem(Integer codigo, Item item) {
      List<Item> itens = pedidos.get(codigio);
      itens.add(item);
      pedidos.put(codigo, itens);
 }
P

E Depois para jogar os dados no banco de dados?

D

Vamos continuar usando o exemplo acima.
Suponha que, agora, você quer fechar a comanda.
Então você terá que criar um método parecido com este

public void  fecharComanda(Integer codigo) {
    List<Item> itens = pedidos.get(codigo);
    gravarItems(itens, codigo);
}

E

public void gravarItens(List<Item> itens, Integer codigo) {
    for(Item item : itens) {
        itemDAO.gravar(item, codigo);
    }
}

No ItemDAO, método gravar:

public void gravar(Item item, Integer codigo) {
     String query = "INSERT INTO [TABELA] (...) VALUES (?, ?, ? ...)";
}
R

Mas a questão é: vc quer ter no banco só o total devido, ou todas compras/itens?
No caso de ter só o total, ai sim vc vai alterar este valor a cada marcação, do contrario, vc só salva as compras com seu valor e o total vc terá fazendo uma busca que some os valores dos itens, como o @darlan_machado já explicou.

Criado 4 de julho de 2018
Ultima resposta 5 de jul. de 2018
Respostas 20
Participantes 5