Inserir dados JTextField em Mysql

Boa noite a todos, criei um form com vários JTextField e no final do form tem um JButton para que quando cliquo neste, ele envia os dados digitados no form para um banco de dados Mysql, só que consigo fazer a conexão com o banco e quando cliquo em enviar aparece a mensagen " Ação não realizada com sucesso". Onde estou errando que não consigo enviar os dados para o banco?
segue o código.

[code]public void enviar() throws ClassNotFoundException
{
Connection con = null;
Statement stmt = null;

  try 
      {   
      Class.forName("org.gjt.mm.mysql.Driver");   	         
      String url="jdbc:mysql://localhost/cadastros";;   
      String user="root";   
      String pass="2017";   
      con = DriverManager.getConnection(url, user, pass);   
      stmt = con.createStatement();   
      stmt.executeUpdate("INSERT INTO membros(Integer m_codigo, String m_nome, String m_end, String m_cidade, String m_congreg, String m_bairro, String m_uf, String m_pai, String m_mae, String m_sexo, String m_cargo, String m_estado_civil, String m_localbatismo, DATE m_databatismo, DATE m_datanascimento, Integer m_rg, Integer m_cpf VALUES("+ jf_codigo+",'"+ jf_nome +"','"+
                  jf_end +"', '"+jf_cidade +"', '"+ jcb_congreg +"', '"+jcb_bairro +"', '"+ jcb_uf +"', '"+jf_pai+"', '"+jf_mae+"', '"+jcp_sexo+"', '"+jcb_cargo+"', '"+jcb_estado_civil+"', '"+jf_local_batismo+"', "+jf_data_batismo+", "+jf_data_nascimento+","+jf_rg+", "+jf_cpf+"))");
          stmt = statement.executeUpdate("select * from membros");
                      
          ResultSet enviar = statement.executeUpdate();     
           while(enviar.next())   
          {       
          Integer codigo = enviar.getInt("Membros");//o parâmetro é o nome da coluna 
          String nome = enviar.getString("m_nome");
          String end  = enviar.getString("m_end");
          String cidade = enviar.getString("m_cidade");
          String congreg = enviar.getString("m_congreg");
          String bairro = enviar.getString("m_bairro");
          String uf = enviar.getString("m_uf");
          String pai = enviar.getString("m_pai");
          String mae = enviar.getString("m_mae");
          String sexo = enviar.getString("m_sexo");
          String cargo = enviar.getString("m_cargo");
          String estado_civil = enviar.getString("m_estado_civil");
          String local_batismo = enviar.getString("m_localbatismo");
          Integer data_batismo = enviar.getInt("m_databatismo");
          Integer data_nascimento = enviar.getInt("m_datanascimento");
          Integer rg = enviar.getInt("m_rg");
          Integer cpf = enviar.getInt("m_cpf");  
         
          enviar mem = new enviar();
       
          
          {
           JOptionPane.showMessageDialog(null, "Ação realizada com sucesso");   
          }
          }   
         }
         catch (SQLException e) 
         {   
         JOptionPane.showMessageDialog(null, "Ação não realizada com sucesso");   
         }   
    [/code]

algumas duvidas… aqueles quadradinhos no seu select o q são?

tenta escrever esse insert e esse select em campos string antes de mandar executar… e coloca um System.out.println(seuString) pra ver o código que aparece e vc poder testar o SQL diretamente no banco

outra coisa… debaixo do JOptionPane coloca um e.PrintStackTrace() e cola o erro que gera la no console aqui pra gente avaliar…

Não entendi seu comentario, teria como explica atraves de codigo?

tipo… primeiro separar cada coisa… encapsular esse metodo conexao em outra classe e tal…
fazendo meio por cima direto aqui no forum, ficaria algo assim… ( me corrija se eu errar pq to fazendo aqui direto )

[code]

public Connection getConexao() {

Connection con = null;     

try   
      {     
      Class.forName("org.gjt.mm.mysql.Driver");                
      String url="jdbc:mysql://localhost/cadastros";;     
      String user="root";     
      String pass="2017";     
      con = DriverManager.getConnection(url, user, pass);
      return con;
 }catch( Exception e ) {
    e.PrintStackTrace();
 }

}

public void enviar() throws ClassNotFoundException {

  Statement = null;
        
  try  {      

       // Pra esse trecho ficar melhor visualizado e mais organizado, seria melhor uma outra classe montar o SQL mas nao farei  
       // isso aqui
       String squery = "INSERT INTO membros(Integer m_codigo, String m_nome, String m_end, String m_cidade, String m_congreg, String m_bairro, String m_uf, String m_pai, String m_mae, String m_sexo, String m_cargo, String m_estado_civil, String m_localbatismo, DATE m_databatismo, DATE m_datanascimento, Integer m_rg, Integer m_cpf VALUES("+ jf_codigo+",'"+ jf_nome +"','"+ jf_end +"', '"+jf_cidade +"', '"+ jcb_congreg +"', '"+jcb_bairro +"', '"+ jcb_uf +"', '"+jf_pai+"', '"+jf_mae+"', '"+jcp_sexo+"', '"+jcb_cargo+"', '"+jcb_estado_civil+"', '"+jf_local_batismo+"', "+jf_data_batismo+", "+jf_data_nascimento+","+jf_rg+", "+jf_cpf+"))"

      System.out.println( "SQL executando: " + squery );

      stmt = con.createStatement();     

      stmt.executeUpdate( squery );

      squery = "select * from membros";

      System.out.println( "SQL executando: " + squery );

      stmt.clearBatch();
   
      ResultSet enviar = stmt.executeQuery( "squery" );  

      if ( !enviar.next() ) {
           JOptionPane.showMessageDialog(null, "Sem dados no resultSet");     
           return;
      }

      enviar.beforeFirst();

      while( enviar.next() )  {

          Integer codigo = enviar.getInt("Membros");//o parâmetro é o nome da coluna   
          String nome = enviar.getString("m_nome");  
          String end  = enviar.getString("m_end");  
          String cidade = enviar.getString("m_cidade");  
          String congreg = enviar.getString("m_congreg");  
          String bairro = enviar.getString("m_bairro");  
          String uf = enviar.getString("m_uf");  
          String pai = enviar.getString("m_pai");  
          String mae = enviar.getString("m_mae");  
          String sexo = enviar.getString("m_sexo");  
          String cargo = enviar.getString("m_cargo");  
          String estado_civil = enviar.getString("m_estado_civil");  
          String local_batismo = enviar.getString("m_localbatismo");  
          Integer data_batismo = enviar.getInt("m_databatismo");  
          Integer data_nascimento = enviar.getInt("m_datanascimento");  
          Integer rg = enviar.getInt("m_rg");  
          Integer cpf = enviar.getInt("m_cpf");           
            
          JOptionPane.showMessageDialog(null, "Ação realizada com sucesso");     
      }  
              
           
  }catch (SQLException e) {                  
      JOptionPane.showMessageDialog(null, "Ação não realizada com sucesso");     
      e.PrintStackTrace();   // não esquecer de colocar essa linha pra vc ver no console o erro que deu

} [/code]

vc vai usar esse metodo exatamente assim?
acho que não precisa dar um select ali pra resgatar os dados sendo que algumas linhas acima vc ainda pega os dados dentro daquelas variaveis usadas no insert…

veja no console o select que ele gerou e testa direto no banco… e coloca esse e.PrintStackTrace() pra ver os erros que aparecem no console

no código que vc postou, vc nao fechou as chaves do while, vc viu? O reddragon arrumou isso ao citar o código!
… Mas realmente o que eu red falou é o mais indicado msmo… ver em qual linha deu o erro e qual erro foi… fica muito mais fácil
descobrir o que esta de estranho no código…

abrazz

Fiz como mostrado pelo colega, e quando coloco a linha de comando “e.PrintStackTrace();” dá um erro.

Na verdade o código correto seria:

}catch (Exception e) { e.printStackTrace(); }

com o p em lower case :wink:

Aproveitando… :roll:

Como faço para registrar dados em duas tabelas relacionadas,mysql… :wink:

[quote=Anime]Aproveitando… :roll:

Como faço para registrar dados em duas tabelas relacionadas,mysql… :wink: [/quote]

como assim? vc pode realizar 2 operações de insert ou fazer usar um sql soh… vc ta perguntando em sql? nao entendi =x

Pra começo de conversa, seu sql com Statement é vulnerável à ataques de injeção de SQL, por exemplo, ' show tables --.
Aposto que o erro está em alguma parte do seu SQL concatenado.
Experimente usar PrepareStatement, é mais seguro.
Se não estou enganado, executeUpdate não serve para instruções do tipo insert. Experimente executeQuery.
Para visualizar melhor o erro, use e.getMessage na sua exceção.

coloca o e.printstacktrace do jeito que o d34d_d3v1l falou
dae manda debugar seu programa
dae no console vai aparecer o ponto exato do erro no seu codigo… se for SQL vai apontar ali tb o erro no sql

[quote=Anime]Aproveitando… :roll:

Como faço para registrar dados em duas tabelas relacionadas,mysql… :wink: [/quote]

Se tem várias tabelas que se relacionam, eu recomendo que você use o hibernate para cuidar da parte de relacionamentos: com um [quote]insert(pai)[/quote] se houver filhos ele salva o pai na tabela pai e os filhos na tabela filho. É bacana se você não está interessada em escrever consultas SQL que salvam dados em várias tabelas relacionadas. Outra opção é você implementar seu próprio ORM (Object-relational mapping).

[quote=menino_levado][quote=Anime]Aproveitando… :roll:

Como faço para registrar dados em duas tabelas relacionadas,mysql… :wink: [/quote]

Se tem várias tabelas que se relacionam, eu recomendo que você use o hibernate para cuidar da parte de relacionamentos: com um [quote]insert(pai)[/quote] se houver filhos ele salva o pai na tabela pai e os filhos na tabela filho. É bacana se você não está interessada em escrever consultas SQL que salvam dados em várias tabelas relacionadas. Outra opção é você implementar seu próprio ORM (Object-relational mapping).[/quote]

Oi,

Obrigada… :wink:

Olha o erro que apareceu
java.sql.SQLException: No suitable driver found for (tradução: drives não encontrado para
at java.sql.DriverManager.getConnection(DriverManager.java:602)
at java.sql.DriverManager.getConnection(DriverManager.java:207)
at cadastro.enviar(cadastro.java:495)
at cadastro.actionPerformed(cadastro.java:420)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6041)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
at java.awt.Component.processEvent(Component.java:5806)
at java.awt.Container.processEvent(Container.java:2058)
at java.awt.Component.dispatchEventImpl(Component.java:4413)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4243)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
at java.awt.Container.dispatchEventImpl(Container.java:2102)
at java.awt.Window.dispatchEventImpl(Window.java:2440)
at java.awt.Component.dispatchEvent(Component.java:4243)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

Se não estou errado, vc deve adicionar em seu classpath o driver JDBC do banco a ser utilizado!!

supondo q vc esta usando o eclipse, clica com o botão direito no seu projeto, build patch, add external archives

procura entao o driver jdbc ( a extensão dele provavelmente eh JAR… vc baixa no site do mysql mesmo ou do Java ) esse driver tem q ser a mesma versão do banco mysql que vc tem instalado no seu pc senão não vai funcionar…

pede pra executar de novo e mostra o novo erro que deu…

Colega, acontece que o drive do Mysql está na adicionado na pasta classpath do projeto principal.

me parece sinceramente que o problema está no drive…

-experimente usar a string “com.mysql.jdbc.Driver” para o driver
-experimente baixar outro drive… se vc procurar na net, vai ver que esse erro geralmente se resolve baixando outro driver… mas tenha certeza de que o drive que baixar tenha a mesma versão do seu bd