Java + mysql + erro ao dar insert

8 respostas
S

Boa noite pessoal,

Depois de muito pesquisar e nenhum sucesso nas minhas tentativas resolvi abrir este tópico.

Estou desenvolvendo um projeto em java, um cadastro qualquer e simplesmente não consigo dar o INSERT na minha tabela.
Já dei um system.out.println no meu sql e ver se é algum erro de sintaxe no meu sql mas está tudo OK, copio a String da sql gerado pelo java e faço o INSERT manualmente funciona 100%.

Estou usando netbeans.

Bom, explicando meu projeto:

-Criei uma classe mysql dentro de um pacote util.
package Util;
import java.sql.*;
import javax.swing.*;
import java.util.*;

public class mysql{
    
    final private String driver = "com.mysql.jdbc.Driver";
    final private String url = "jdbc:mysql://localhost:3306/tcc";
    final private String usuario = "root";
    final private String senha = "";
    private Connection conectar;
    public Statement stm;
    public ResultSet rs;
    
    public boolean isConnect(){
    
        boolean result = true;
        try{
            Class.forName(driver);
            conectar = DriverManager.getConnection(url, usuario, senha);
            JOptionPane.showMessageDialog(null, "conectado");
        }
        catch(ClassNotFoundException Driver){
            JOptionPane.showMessageDialog(null, "Driver nao localizado: " + Driver);
            result = false;
        }
        catch(SQLException Fonte){
            JOptionPane.showMessageDialog(null, "Erro na conexão com a fonte de dados: " + Fonte);
            result = false;
        }
    return result;        
    }
    
    public void desconectar(){
        boolean result = true;
        try{
            conectar.close();
            JOptionPane.showMessageDialog(null, "Banco desconectado");
        }
        catch(SQLException fechabanco){
            JOptionPane.showMessageDialog(null, "Não foi possível desconectar do banco: " + fechabanco);
            result = false;
        }
    }
    
    public void executaSQL(String sql){
        try{
            stm = conectar.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
            rs = stm.executeQuery(sql);
        }
        catch(SQLException sqlex){
            JOptionPane.showMessageDialog(null, sqlex.getMessage() + "SQL: " + sql);
        }
    }    
}
-codigo da interface (coleta dos dados para insert) chamo o util.mysql para conectar e trabalho com o banco... os SELECTs funcionam normalmente mas o INSERT não
private void lbInserirNovoModActionPerformed(java.awt.event.ActionEvent evt) {                                                 

       mysql con_novomodelo;
       con_novomodelo = new mysql();
       con_novomodelo.isConnect();          

        try{
            String sqlModelo = "INSERT INTO estator_pcp (tipo,tubo,geometria,vazao,"
                                                      + "d_maior_nominal,d_menor_nominal,"
                                                      + "coe_dil_d_maior,coe_dil_d_menor,"
                                                      + "diam_int_tubo,tela) "
                                    + "VALUES ((SELECT codigo FROM tipo WHERE (descricao = '" + jcbTipo.getSelectedItem() + "')),"
                                                  + "(SELECT codigo FROM tubo WHERE (descricao = '" + jcbTubo.getSelectedItem() + "')),"
                                                  + "(SELECT codigo FROM geometria WHERE (descricao = '" + jcbGeometria.getSelectedItem() + "')),"
                                                  + "(SELECT codigo FROM vazao WHERE (descricao = '" + jcbVazao.getSelectedItem() + "')),"
                                                  + jtfdmaior.getText() + "," + jtfdmenor.getText() + "," + jtfCoedil_dmaior.getText() + "," + jtfCoeDil_dmenor.getText() + ","
                                                  + jtfIdTubo.getText() + "," + tela + ")";
            
           con_novomodelo.stm.executeUpdate(sqlModelo); //ESTA LINHA NÃO FUNCIONA, O QUE HÁ DE ERRADO?
           JOptionPane.showMessageDialog(null, "gravado");
        }
        catch(SQLException erro){
        }
        
    }

8 Respostas

mauricioadl

vc deu commit?
gera algum erro? sim: qual erro?

S
mauricioadl:
vc deu commit? gera algum erro? sim: qual erro?

nao gera nenhum erro... nada...

fiz um outro teste... na classe main fazendo direto e funciona mas o meu usando em classes diferentes nao....

package javaapplication3;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JavaApplication3 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        String driver = "com.mysql.jdbc.Driver"; //Classe do driver JDBC
           String banco = "tcc"; //Nome do Banco criado
           String host = "localhost"; //Maquina onde está o banco
           String str_conn = "jdbc:mysql://" + host + ":3306/" + banco; //URL de conexão
           String usuario = "root"; //Usuário do banco
           String senha = ""; //Senha de conexão

           try {
               Class.forName(driver); //Carrega o driver

               //Obtém a conexão com o banco
               Connection conn = DriverManager.getConnection(str_conn, usuario, senha);

               //Cria um statement para podermos mandar um SQL para o banco
               Statement stmt = conn.createStatement();

               //Mandamos o SQL para o banco e obtemos um ResultSet
               String sql = "insert into tipo (descricao) values ('teste')";
               int rs = stmt.executeUpdate(sql); 
               if(rs==1){
                   System.out.println("cadastrado");
               }else
                   System.out.println("naooo cadastrado");
               

             Percorrendo o ResultSet e obtendo os valores do banco
             while (rs.next()) {
             System.out.println(rs.getString("descricao"));
                    
             
        }
        catch (Exception e) {
             System.out.println("Não foi possível carregar o driver.");
            
        }

    }
}
mauricioadl

falta vc dar um createStatement ae vai funcionar.

outra coisa, acho q vc deveria dar uma procurada em fabrica de conexoes e DAO. sao padroes para usar jdbc, vao ajudar muito.

S

mauricioadl:
falta vc dar um createStatement ae vai funcionar.

outra coisa, acho q vc deveria dar uma procurada em fabrica de conexoes e DAO. sao padroes para usar jdbc, vao ajudar muito.

mauricioad… ok entendi mas como ficaria isso no meu caso? dou o createstatement no classe mysql ou na classe onde estou chamando o metodo stm…

poderia exemplificar por favor ?

quando ao DAO sei que é o certo a se fazer mas como estou engatinhando ainda quero comecar devagar…

desde já agradeço

A

Acho que o primeiro passo no seu código é descobrir onde está o erro…

Nunca, faça isso:

catch(SQLException erro){  
  }

Não se esconde uma exception assim… É mais feio que bater na mãe!

Há várias formas melhores de tratar uma exception, mas por hora coloque pelo menos um System.out.print para descobrir qual exception está sendo gerada.

S

AbelBueno:
Acho que o primeiro passo no seu código é descobrir onde está o erro…

Nunca, faça isso:

catch(SQLException erro){  
  }

Não se esconde uma exception assim… É mais feio que bater na mãe!

Há várias formas melhores de tratar uma exception, mas por hora coloque pelo menos um System.out.print para descobrir qual exception está sendo gerada.

Grande Abel…

Realmente cometi um erro gravissimo escondento o exception… bom coloquei um println do exception e vi que estava dando problema num atributo FK da tabela onde eu estava tentando inserir os dados… como este atributo no momento não é usado simplesmente nao coloquei ele no insert… simplismente coloque ele dentro do insert como 0 e pronto, funcionou!!!

Obrigado por tudo pessoal…
ate

tek

Esse erro aconteceu para mim também depois consegui descobrir que tenho que usar o seguinte código

public void UpdateSql(String sql,String tipo)
    {
        try
        {
            
            statement = conexao.createStatement();
            System.out.println(sql);
            statement.executeUpdate(sql);
            statement.close();
            java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("view/Bundle"); // NOI18N
            String msg = bundle.getString("MensagemSucesso");
            JOptionPane.showMessageDialog(null, msg+tipo);
        }
        catch(SQLException erro)
        {
            JOptionPane.showMessageDialog(null, "Não foi possível realizar a"+tipo);
        }
        
    }
leonhard32
tek:
Esse erro aconteceu para mim também depois consegui descobrir que tenho que usar o seguinte código
public void UpdateSql(String sql,String tipo)
    {
        try
        {
            
            statement = conexao.createStatement();
            System.out.println(sql);
            statement.executeUpdate(sql);
            statement.close();
            java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("view/Bundle"); // NOI18N
            String msg = bundle.getString("MensagemSucesso");
            JOptionPane.showMessageDialog(null, msg+tipo);
        }
        catch(SQLException erro)
        {
            JOptionPane.showMessageDialog(null, "Não foi possível realizar a"+tipo);
        }
        
    }

Ainda sim não vejo no que ajudaria... pois não exibiria o erro.
Se quiser visualizar o erro pelo JOptionPane mesmo, faça pelo menos algo do tipo:

catch(SQLException erro)
        {
            JOptionPane.showMessageDialog(null, "Não foi possível realizar a " + tipo + "\n" + erro.getMessage() + "\n" + erro);
        }
Criado 19 de agosto de 2011
Ultima resposta 20 de ago. de 2011
Respostas 8
Participantes 5