Inserindo dados no Banco, Java & MYSQL

3 respostas
javamysql
gecardoso

Alô! Galera, Bom Dia, Tô eu aqui, na madruga, queimando as pestanas, para resolver mais um mistério Java… Como sempre, sou mais um iniciante… (como é difícil e chato ser iniciante… parece que a gente chegou no mundo ontem… é chato a bessa…) e tô trazendo aqui um pedaço do código de um projeto que tô desenvolvendo, um GRUD,( é assim que se fala?!) mas, tô tendo dificuldade de inserir os dados no BD. Eu conecto, preparo a SQL, mando executar mas… dá pau, Vejam aí o código e me dá um luz aí… O que será que o gafanhoto aqui ainda não aprendeu direito com o mestre jedai?
Disparado por um botão no meu formulário…
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {

try( // TODO add your handling code here:
       
                   Connection con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/Agenda","root", "root")) { 
               System.out.println("Passei pela linha que solicita a conexão!");
             
               String sql="INSERT INTO pessoa (ID, Nome, Idade, Sexo ) VALUES (?,?,?,?)";
             
               System.out.println("Passei pela linha que seta a sql!");
               try{
                   try ( //Passando os valores para o BD
                           PreparedStatement stmt = (PreparedStatement) con.prepareStatement(sql)) {
                          
                       //Passando os valores para o BD 
                       stmt.setString(1, jTextField1.getText());
                       stmt.setString(2, jTextField1.getText());
                       stmt.setString(3, jTextField1.getText());
                       stmt.setString(4, jTextField1.getText());
                      
                       //stmt.execute(); não aceita este comando!
                       
                       stmt.executeUpdate();aceita este mas,  erro de SQL( "Não foi possível inserir no BD!" )
                       
                   }
                   
               } catch (SQLException sQLException) {
                   System.out.println("Não foi possível inserir no BD!");
                   con.close();
               }           }catch (SQLException ex) {
        System.out.println("Não foi possível desconectar do BD!");
         
       }
    
}

Valeu Galera?!..

3 Respostas

peczenyj

vc pegou o erro ( o objeto sQLException ) e ignorou totalmente.

duas dicas:

  1. SEMPRE imprima a mensagem que vem com a exception.
  2. SE NECESSARIO chame o metodo printStackTrace() pra gente entender de onde veio a exception
gecardoso

Caro peczenyj! Ok! Com toda razão… eu só retornei um texto meu para sinalizar-me qual trecho estava sendo pego pelo trya…catch. Dei uma arrumada no código e segue ai abaixo com o ERRO: reportado pelo depurador… A medida que fui inserindo as linhas eu fui aceitando as indicações da IDE( Netbeans ). Eu percebi, também, que o código só funciona se eu digitar os dados diretamente na string da sql, ao invés de (?, ?, ?, ?). Espero que possa entender o código e a critica reportada. Fico no aguardo…
Valeu?!

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

// TODO add your handling code here:
       //Connection con = CriaConexao.getConnection();
       try (Connection con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/Agenda","root", "root")) {
         String sql="INSERT INTO pessoa (ID, Nome, Idade, Sexo ) VALUES (?,?,?,?)";
          PreparedStatement stmt = (PreparedStatement) con.prepareStatement(sql) ;
          
           try {
             //Passando os valores para o BD
                       stmt.setString(1, jTextField1.getText() );
                       stmt.setString(2, jTextField2.getText() );
                       stmt.setString(3, jTextField3.getText()  );
                       stmt.setString(4, jTextField4.getText());
                      
                   } catch (SQLException ex) {
                       Logger.getLogger(JFAssociacoes.class.getName()).log(Level.SEVERE, null, ex);
                        System.out.println("Passei pelas linhas que pegas o dados para o BD!");
                   }
           try {
               //stmt.execute();
               //System.out.println("Passei pela linha que executa a sql!");
               stmt.executeUpdate();
           } catch (SQLException ex) {
               Logger.getLogger(JFAssociacoes.class.getName()).log(Level.SEVERE, null, ex);
                System.out.println("LINHA QUE ATUALIZA O BD!");
           }
                      
           try {
               stmt.close();
           } catch (SQLException ex) {
               Logger.getLogger(JFAssociacoes.class.getName()).log(Level.SEVERE, null, ex);
               System.out.println("Passei pela linha fecha o statement!");
           }
        } catch (SQLException ex) {
        System.out.println("Passei pela linha que solicita a conexão!");
        System.out.println("Passei pela linha que seta a sql!");
        Logger.getLogger(JFAssociacoes.class.getName()).log(Level.SEVERE, null, ex);
        }
      
    }                   
       ERRO :
run:

LINHA QUE ATUALIZA O BD!

set 25, 2016 5:40:00 PM br.com.cadeexemplocombd.views.JFAssociacoes jButton2ActionPerformed

GRAVE: null

com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column Idade at row 1

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3964)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3902)

at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2526)

at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2673)

at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2549)

at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1861)

at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1192)

at br.com.cadeexemplocombd.views.JFAssociacoes.jButton2ActionPerformed(JFAssociacoes.java:284)

at br.com.cadeexemplocombd.views.JFAssociacoes.access$000(JFAssociacoes.java:22)

at br.com.cadeexemplocombd.views.JFAssociacoes$1.actionPerformed(JFAssociacoes.java:150)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)

at java.awt.Component.processMouseEvent(Component.java:6533)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)

at java.awt.Component.processEvent(Component.java:6298)

at java.awt.Container.processEvent(Container.java:2236)

at java.awt.Component.dispatchEventImpl(Component.java:4889)

at java.awt.Container.dispatchEventImpl(Container.java:2294)

at java.awt.Component.dispatchEvent(Component.java:4711)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)

at java.awt.Container.dispatchEventImpl(Container.java:2280)

at java.awt.Window.dispatchEventImpl(Window.java:2746)

at java.awt.Component.dispatchEvent(Component.java:4711)

at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)

at java.awt.EventQueue.access$500(EventQueue.java:97)

at java.awt.EventQueue$3.run(EventQueue.java:709)

at java.awt.EventQueue$3.run(EventQueue.java:703)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)

at java.awt.EventQueue$4.run(EventQueue.java:731)

at java.awt.EventQueue$4.run(EventQueue.java:729)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

CONSTRUÍDO COM SUCESSO (tempo total: 10 segundos)

peczenyj

Vejamos

Idade com certeza é numerico. getText vai retornar uma string.

vc deveria usar, por exemplo

stmt.setLong( 3, Long.parseLong( jTextField3.getText() );

( acho que tem um setInt também, de deve ser ate mais indicado )

Criado 25 de setembro de 2016
Ultima resposta 26 de set. de 2016
Respostas 3
Participantes 2