Try-catch e analise de código

Oi pessoal, boa tarde.

Criei um botão com a função de armazenar dados no meu BD, os dados estão sendo armazenados corretamente, porém ao gravar os dados aparece a mensagem para o usuário “Dados Cadastrados!” e em seguida outra mensagem informando “Usuário não Cadastrado!”. Alguém poderia explicar qual o problema com o try-catch, fazer uma análise do código e informar o que pode ser melhorado.

    private void ButtonSalvarActionPerformed(java.awt.event.ActionEvent evt) {                                             

        try {
            conexao c = new conexao();
            String query = "SELECT PERFIL, COD_PERFIL FROM TAB_PERFIL";
            c.stm1 = c.con.prepareStatement(query);
            c.res = c.stm1.executeQuery();

            while (c.res.next()) {
                if (c.res.getString("PERFIL").equals(ComboBoxPerfil.getSelectedItem())) {

                    LabelCodPerfil.setText(c.res.getString("COD_PERFIL"));

                    String query1 = " INSERT INTO TAB_USUARIO (USUARIO, PERFIL, SENHA, DATA_INCL) values ('"
                            + TextFieldNome.getText().toUpperCase() + "' , '"
                            + ComboBoxCodPerfil.getSelectedItem() + "' , '"
                            + PasswordFieldSenha.getText().toUpperCase() + "' )";
                    c.res = c.stm.executeQuery(query1);

                    JOptionPane.showMessageDialog(null, "Dados Cadastrados!",
                            "Cadastro de Usuário", 2);
                }
            }
            c.stm.close();

        } catch (Exception e) {

            JOptionPane.showMessageDialog(null, "Usuário não Cadastrado!",
                    "Cadastro de Usuário", 2);
        }
}

Agradeço as sugestões.
[]´s

Sem que você use a tag code fica difícil entender o que esse código faz.
Por favor, leia esse tópico:

Oii ViniGodoy,
o código ficou bem melhor agora.
valeu pela dica.
[]´s

Cara ta complicado seu código. Mas ta faltando você inserir…tipo

stm1.setString(1, ........);

[quote=DanielLucena]Oi pessoal, boa tarde.

Criei um botão com a função de armazenar dados no meu BD, os dados estão sendo armazenados corretamente, porém ao gravar os dados aparece a mensagem para o usuário “Dados Cadastrados!” e em seguida outra mensagem informando “Usuário não Cadastrado!”. Alguém poderia explicar qual o problema com o try-catch, fazer uma análise do código e informar o que pode ser melhorado.

    private void ButtonSalvarActionPerformed(java.awt.event.ActionEvent evt) {                                             

        try {
            conexao c = new conexao();
            String query = "SELECT PERFIL, COD_PERFIL FROM TAB_PERFIL";
            c.stm1 = c.con.prepareStatement(query);
            c.res = c.stm1.executeQuery();

            while (c.res.next()) {
                if (c.res.getString("PERFIL").equals(ComboBoxPerfil.getSelectedItem())) {

                    LabelCodPerfil.setText(c.res.getString("COD_PERFIL"));

                    String query1 = " INSERT INTO TAB_USUARIO (USUARIO, PERFIL, SENHA, DATA_INCL) values ('"
                            + TextFieldNome.getText().toUpperCase() + "' , '"
                            + ComboBoxCodPerfil.getSelectedItem() + "' , '"
                            + PasswordFieldSenha.getText().toUpperCase() + "' )";
                    c.res = c.stm.executeQuery(query1);

                    JOptionPane.showMessageDialog(null, "Dados Cadastrados!",
                            "Cadastro de Usuário", 2);
                }
            }
            c.stm.close();

        } catch (Exception e) {

            JOptionPane.showMessageDialog(null, "Usuário não Cadastrado!",
                    "Cadastro de Usuário", 2);
        }
}

Agradeço as sugestões.
[]´s[/quote]

eu te indicaria estudar um pouco mais a api de jdbc e o funcionamento do bloco try catch também, inclusive o finally para chamar o close de seus recursos, seu código tem vários erros, alguns na forma como é organizado outros como é usado mesmo;

não vi onde você fecha sua conexão, ou avisa o objeto c para ele fechar, você até fecha o stmt mas deve fechar também a sua conexão e o resultSet, e no finally, não no try (imagina se der erro, ai seu código não vai chegar na parte que fecha seus recursos);

sua classe conexão (que está com o nome fora do padrão, apesar de isso não der erro não é o indicado) está com os atributos liberados para acesso direto, o que deveria ser feito via getters e setters ja que você vai fazer isso (pessoalmente acho inviavel ter uma classe para gerenciar resultset, statement e conexão);

com um comando insert você deveria chamar o método executeUpdate e não executeQuery;

você não está dando commit nem rollback na sua conexão com o banco de dados (deve ser feito no final do try e no começo do catch respectivamente).

é indicado usar “?” nos valores a serem inseridos na sua query e PreparedStatement ao invés de statement como você deve estar usando;

repare que vocÊ primeiro faz um select e depois da um inser a cada “loopada” no seu while (c.res.next()). Sendo assim ele exibiria o primeiro JOptionPane uma vez para cada linha retornada na query que você faz antes. Se retornou duas linhas você teria dois inserts e exibira o primeiro joptionpane 2 vezes, se na segunda vez tiver dado erro, vai sair do try, portanto também do loop e irá para o catch, onde exibirá o segundo joptionpane, ja que os dados sendo inseridos são os mesmos a cada loopada, vai dar erro caso sua tabela não permita repetições, um chute provavel para o motivo do seu erro, ja que exibiu o primeiro joptionpane uma vez.

não leve a mal, estou apontando essas coisas para você saber onde está fazendo errado e poder consertar… mas não deixe de estudar…

Valeu pelas dicas…
É justamente isso que estava buscando, orientações pera ir aprimorando os estudos. O código fui fazendo apartir de outras dicas em foruns, internet, etc.
Até que funcionou o armazenamento dados no BD que era o que eu queria, mas a dúvida era se estava funcionando da forma correta.
As suas dicas foram muito boas pra mim, vou procurar entender um pouco mais os erros e aprender mais.
Até mais,
[]´s

faz o download da apostila fj11 e fj21 da caelum… e/ou das apostilas do curso da iniciativa jedi… ambos são doas referências e gratuitos.