Fazer verificação se ja existe elementos no banco de dados

Amigos, estou fazendo um trabalho para faculdade e to com dificuldade de como implementar uma verificação de formulário java e mysql. Basicamente o programa realiza um cadastro de valores (comissão de funcionário). O cadastro contem a loja do funcionário, o mês e ano da comissão e o valor da comissão.

private void cadastrar_comissao() {
                     
        String sql = "insert into tbcomissao (loja, mes, ano, valor, iduser) values (?,?,?,?,?)";

        try {
            pst = conexao.prepareStatement(sql);
            pst.setString(1, cboComLoja.getSelectedItem().toString());
            pst.setString(2, cboComMes.getSelectedItem().toString());
            pst.setString(3, cboComAno.getSelectedItem().toString());
            pst.setString(4, txtComValor.getText().replace(",", "."));
            pst.setString(5, txtComId.getText());

            if ((txtComId.getText().isEmpty() || cboComLoja.getSelectedItem().equals("Selecione uma loja") || cboComMes.getSelectedItem().equals("Selecione o mês") || txtComValor.getText().isEmpty())) {
                JOptionPane.showMessageDialog(null, "Preencha todos os campos!");

            } else {
                int adicionado = pst.executeUpdate();
                if (adicionado > 0) {
                    JOptionPane.showMessageDialog(null, "Comissão cadastrada com sucesso!");

                    txtComPesquisar.setText(null);
                    txtComId.setText(null);
                    txtComValor.setText(null);

                }
            }

        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e);
        }
    }

Eu preciso que antes que seja cadastrado uma novo valor seja feita uma verificação de forma que se já houver valores cadastrado na mesma loja, mês e ano para um funcionário o sistema não permita a realização dessa inserção.

O funcionário não pode ter mais de uma comissão para um determinado mês, ano e loja.

Olá, muito simples, não é viável fazer isso pelo software, tendo em vista que o banco já traz recursos pra isso.
É só criar uma restrição de unicidade na tabela (UNIQUE), que ele não permitira a inserção, ai é só tratar o retorno se quiser dar uma mensagem bonitinha pro usuário.

1 curtida

Olá Rodrigo, primeiramente agradeço.

Algumas dúvidas…

‘data_comissao’, ‘timestamp’, ‘NO’, ‘’, ‘CURRENT_TIMESTAMP’, ‘’
‘loja’, ‘varchar(20)’, ‘NO’, ‘’, NULL, ‘’
‘mes’, ‘varchar(30)’, ‘NO’, ‘’, NULL, ‘’
‘ano’, ‘varchar(15)’, ‘YES’, ‘’, NULL, ‘’
‘valor’, ‘decimal(10,2)’, ‘NO’, ‘’, NULL, ‘’
‘iduser’, ‘int(11)’, ‘NO’, ‘MUL’, NULL, ‘’

Essa é minha tabela de comissão, se eu colocar loja, mes ou ano como unique ele so aceitará uma entrada, né isso? No caso eu posso ter vários funcionários recebendo uma comissão para aquele mesmo mês, loja e ano. O que eu quero é que o programa não permita que um mesmo funcionário possa ter uma comissão para aquele mesma loja, mês e ano.

data do cadastro ---------------------- loja --------------------------- mes -------ano ----- valor ---- iduser

2017-05-24 22:49:24	1 - Candelária	        Janeiro	 2017	650.00	3
2017-05-25 18:10:54	3 - Satélite    	Janeiro	 2017	300.00	3
2017-05-24 22:50:22	3 - Satélite	       Fevereiro 2017	6543.00	3
2017-05-25 18:23:27	1 - Candelária	        Janeiro  2017	500.00	4
2017-05-25 18:23:38	1 - Candelária	        Janeiro  2017	400.00	4

As 3 primeiras inserções estão ok, mas as duas últimas era o que eu gostaria que o sistema não permitisse (mesma loja, mês e ano e funcionário com 2 valores).

Unique quer dizer que naquela tabela só pode conter 1 registro com aquela informação (não pode repetir).

Como você tem um campo com mes e outro ano, se você colocar unique, só 1 registro pode ser 2017 por exemplo, não é o que você quer.

Dependendo do seu modelo de negócio daria para colocar Unique na coluna de mes…

Agora para validar, você poderia dar um select.

SELECT * FROM [tabela] WHERE iduser = codigo AND mes = 'JANEIRO'

Se retornar algum registro é porque já tem comissão no mês de Janeiro para o usuário tal…

Poisé, é só colocar o iduser junto na restrição… Então aquele usuário, naquele mês, ano e loja só ocorrerá uma vez!