Código não insere no banco

4 respostas
laercioferracini

Boa tarde

Estou fazendo uma aplicação em Java Desktop, e tenho um JFrame para marcação de consulta. Só que a lógica que fiz não está inserindo nada no banco.

Ele faz um select no banco para puxar os dados, se eles forem iguais ele não insere, mas como a tabela está vazia ele não entra no loop

O que será que está errado?

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

       getNumConv = Integer.parseInt(cpNumConv.getText());
       getNumCpf = cpNumCpf.getText();
       getEspec = (String) cbEspec.getSelectedItem();
       getNomeMed  = (String) cbNomeMed.getSelectedItem();
       getData = (String) cbData.getSelectedItem();
       getHora = (String) cbHora.getSelectedItem();



       try{
           conSql.conectaSQL();
           conSql.RS = conSql.getStatement().executeQuery("Select dataAgendamento, horarioAgendamento from Agendamento");
           String data = ("");
           String hora = ("");
           int i = 0;
         
           // se for a primeira marcação de consulta ele entrara aqui
           if (conSql.RS.first()){
               System.out.println("entrei no 1º IF");
               int resultado = conSql.getStatement().executeUpdate("insert into Agendamento"
                   + "(horarioAgendamento, dataAgendamento, nomeMedico, codCliente) "
                   + "values('"+getHora+"', '"+getData+"', '"+getNomeMed+"', '"+getNumConv+"')   " );

                   if (resultado >0){

                        JOptionPane.showMessageDialog(this , "Dados salvos com sucesso!");

                   } else{
        		JOptionPane.showMessageDialog(this, "Erro ao tentar Salvar os dados!");
                   }

           }
           else { // se não for ele entrara no loop para fazer a comparação da data e hora escolhidos

           while(conSql.RS.next()){

               

               data = (conSql.getResultSet().getString("dataAgendamento"));
               hora = (conSql.getResultSet().getString("horarioAgendamento"));

               




               if(data.equals(getData) && hora.equals(getHora))
               {

                   JOptionPane.showMessageDialog(this, "O horario escolhido está reservado");
                   
               }

               else {

                   //Comando
                   int resultado = conSql.getStatement().executeUpdate("insert into Agendamento"
                   + "(horarioAgendamento, dataAgendamento, nomeMedico, codCliente) "
                   + "values('"+getHora+"', '"+getData+"', '"+getNomeMed+"', '"+getNumConv+"')   " );

                   if (resultado >0){

                        JOptionPane.showMessageDialog(this , "Dados salvos com sucesso!");

                   } else{
        		JOptionPane.showMessageDialog(this, "Erro ao tentar Salvar os dados!");
                   }
                   i++;
                   

               }
               
           } // fim do while

           }
        } catch (SQLException e){ // trata os erros
	JOptionPane.showMessageDialog(this, "Erro Cmdo SQL "+e.getMessage());
        }
           
       
    }

4 Respostas

Anime

Oi laercioferracini ,

Sua lógica esta meio “embolada”,mas vc pode tentar incluir algo no banco direto e depois tentar novamente… :roll:

adriano_si
if (conSql.RS.first()){

Essa linha precisa ser uma negação…

Retirada da API a implementação do método first()

Logo o seu método first retornará false e ele nunca vai inserir o seu registro…

Abs[]

ViniGodoy
  1. Não use o método first(). Como a documentação que o adriano_si postou explica, ele vai dar erro se o resultset estiver em modo FORWARD_ONLY. E esse é o padrão. Além disso, mudar o resultset consome mais recursos e é geralmente desnecessário;
  2. Use o PreparedStatement para evitar essas concatenações horríveis;
  3. Crie o statement toda vez, e não crie uma propriedade RS para o seu resultset. Esses objetos são melhores utilizados se descartados ao final da consulta, devidamente fechados;
laercioferracini
<blockquote><div class="quote-author">ViniGodoy:</div>1. Não use o método first(). Como a documentação que o adriano_si postou explica, ele vai dar erro se o resultset estiver em modo FORWARD_ONLY. E esse é o padrão. Além disso, mudar o resultset consome mais recursos e é geralmente desnecessário;

2. Use o PreparedStatement para evitar essas concatenações horríveis;

3. Crie o statement toda vez, e não crie uma propriedade RS para o seu resultset. Esses objetos são melhores utilizados se descartados ao final da consulta, devidamente fechados;

</blockquote>

Valeu pelas dicas ViniGodoy, realmente as concatenações são horrendas, pior do que o céu de Krikkit… rsrs

eu dei uma nesse PreparedStatement e é muito melhor!!!

abraço

Criado 1 de novembro de 2010
Ultima resposta 2 de nov. de 2010
Respostas 4
Participantes 4