[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

Rodrigo_Void

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

Rodrigo_Void

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

Rodrigo_Void

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.

rodriguesabner

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

rodriguesabner

Usa o update então

darlan_machado

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.

rodriguesabner

Adicionar um por um mesmo? Por ID?

darlan_machado

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

rodriguesabner

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

darlan_machado

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.

rodriguesabner

Entendi, valeu.

darlan_machado
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?

darlan_machado

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 (?, ?, ? ...)";
}
Rodrigo_Void

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