Erro ao inserir novo Registro no Mysql

7 respostas
JennyMelo
Olá...Antes de começar a descrever o meu problema já pesso desculpa por que sei que é pra evitar tópicos repetidos. Mais eu já procurei em tudo quanto é lugar e não consegui nada que resolve-se o meu problema. Eu estou desenvolvendo um sistema de cadastro de processo e travei na hora de inserir os novos registros... Ele emite a mensagem de "Cadastro Realizado!", mais quando vou verificar no banco não teve nenhuma atualização. *Esta é a classe de conexão com o banco e que emite a mensagem de atualização...segue
public class AcessoBD {
  private Connection con = null;
  private Statement statement;
  private PreparedStatement preparedStatement;
  private String nomeBD;


  public  AcessoBD(String nomeBD) {
      //Configura o banco de dados
      String user = "root",password = "";
      ConfigBD(nomeBD, user, password);
      this.nomeBD = nomeBD;

      //Configura o banco de dados
      ConfigBD(nomeBD, user, password);
    }

    void Processo(String string) {
        AcessoBD bd;
    }

    //Configuração inicial do banco de dados
    private void ConfigBD(String nomeBD, String user, String password) {
            String driver = "com.mysql.jdbc.Driver",
            URL = "jdbc:mysql://localhost:3306/" +nomeBD;

   //setar o driver
   try
    {
      Class.forName(driver).newInstance();
      con = DriverManager.getConnection( URL, user, password );
      System.out.println("Conexão com o banco de dados: "+nomeBD+" realizada com sucesso!");
    } catch (Exception e){
      System.err.println(e.getMessage());
    }
  }

   //Consulta a Base de Dados
  public ResultSet consultaTable(String ConsultaSQL) throws SQLException
  {
     ResultSet resultado = null;
     try{
        if(con != null)
        {
          if(statement !=null)
                 statement.close();
          statement = con.createStatement();
          resultado = statement.executeQuery(ConsultaSQL);
        }
      } catch ( SQLException e ){
        System.out.println(e.getMessage());
        /*JOptionPane.showMessageDialog( null, "Nao foi possivel atender a solicitação");*/
      }
      return resultado;
 }  
    void updateBase(String updateSQL, Date data1) {
        int execucaoOk = 1;
     try
     {
        if(con != null)
        {
             if(preparedStatement != null)
                 preparedStatement.close();  //Fechando a instrução

              if(statement !=null)
                 statement.close(); //Fechando a instrução

             //prepara uma sentenca SQL para ser executada pelo banco de dados
             preparedStatement = con.prepareStatement(updateSQL);

             //passa para a sentenca SQL um campo do tipo java.sql.Timestamp gerado a partir de um campo java.sql.Date
             //O metodo setTimestamp recebe como parametro um numero que corresponde ao ?, neste caso tem apenas um sinal de ?, portanto, o numero eh 1.
             //Tambem recebe um campo do tipo java.sql.Timestamp

             preparedStatement.setTimestamp(1, new java.sql.Timestamp(data1.getTime()));

             execucaoOk = preparedStatement.executeUpdate();
	     JOptionPane.showMessageDialog( null,"Atualização realizada com Sucesso!!");
        }
     } catch ( SQLException e ){
         System.err.println(e.getMessage());
 	 JOptionPane.showMessageDialog( null,"Atualização não Realizada!");
     }

 }
    public int updateBase(String updateSQL)
 {   int execucaoOk=1;
     try
     {
        if(con != null)
        {
             if(statement !=null)
                 statement.close();  //Fechando a instrução
             statement = con.createStatement();
             execucaoOk=statement.executeUpdate(updateSQL);
	     JOptionPane.showMessageDialog( null,"Atualização realizada com Sucesso!!");
        }
     } catch ( SQLException e ){
         System.err.println(e.getMessage());
 	 JOptionPane.showMessageDialog( null,"Atualização não Realizada!");
     }
     return execucaoOk;
 }
    //Retorna todos os registros da tabela
  public javax.swing.JTable obtemTable(ResultSet resultado){
      javax.swing.JTable tabela;
      Vector cabecalho = new Vector();
      Vector linhas = new Vector();

      try{
          ResultSetMetaData rsmd = resultado.getMetaData();
          //obtem os nomes das colunas da tabela
          for(int i=1; i<=rsmd.getColumnCount(); i++)
              cabecalho.addElement(rsmd.getColumnName(i));

          //obtem as linhas da tebela
          do{
              linhas.addElement(obtemRegistro(resultado, rsmd));
          }while (resultado.next());
       } catch (java.sql.SQLException e)    {
         System.err.println("Erro de SQL: "+e.getMessage());
       }
      //monta a tabela com cabeçalho e registros
      tabela = new javax.swing.JTable(linhas, cabecalho);
      return tabela;
  }
  //obtem os registros da tabela
  private Vector obtemRegistro(ResultSet resultado, ResultSetMetaData rsmd){
      Vector registro= new Vector();
       java.text.SimpleDateFormat dataFormata = new java.text.SimpleDateFormat("dd/MM/yyyy");

      try{
          for(int i=1; i<=rsmd.getColumnCount(); i++)
              switch (rsmd.getColumnType(i)) {
                  case Types.VARCHAR:registro.addElement(resultado.getString(i));
                                     break;
                  case Types.INTEGER:registro.addElement(resultado.getInt(i));
                                     break;
                  case Types.DECIMAL:registro.addElement(resultado.getDouble(i));
                                     break;
                  case Types.REAL:registro.addElement(resultado.getDouble(i));
                                     break;
                  case Types.TIMESTAMP:registro.addElement(dataFormata.format(resultado.getDate(i)));
                                     break;
              }
          } catch (java.sql.SQLException e)    {
         System.err.println("Erro de SQL: "+e.getMessage());
       }
      return registro;
  }

 //Fecha a  Base de Dados
 void finalizaBD() {
    try
    {
     if (con !=null)
         statement.close();
         con.close();
         System.out.println("Banco de Dados: "+ nomeBD +" fechado!");
    } catch ( SQLException e ) {
       System.err.println(e.getMessage());
    }
 }
*E esta é a classe com os insert...segue
//inserção de dados no banco de Dados da tela de tramitação
    String incTramP(){
        return "insert into processo(numprocesso,requerente, assunto, endereco, bairro, lote, loteamento, quadra, identcadastral)" +
               "values('"+processo+"','"+requerente+"','"+assunto+"','"+endereco+"','"+bairro+"','"+lote+"','"+loteamento+"','"+quadra+"','"+identCadastral+"')";
    }

    String incTramitacaoProcesso()
    {
    try{
        ResultSet resultado = bd.consultaTable("select max(codprocesso) from processo");
        if(resultado!=null && resultado.next())
          do{
             setCodProcesso(resultado.getInt("codprocesso"));
          }while(resultado.next());
    } catch (java.sql.SQLException e)
    {
        System.err.println("Erro de SQL: "+e.getMessage());
    }
    return "insert into processo(numprocesso,requerente, assunto, endereco, bairro, lote, loteamento, quadra, identcadastral)" +
           "values('"+processo+"','"+requerente+"','"+assunto+"','"+endereco+"','"+bairro+"','"+lote+"','"+loteamento+"','"+quadra+"','"+identCadastral+"')";
  }

    public void insercaoTrP(){
        bd.updateBase(incTramP());
    }

    public void insercaoTP(){
        bd.updateBase(incTramitacaoProcesso());
    }
   //inserção da tela Comunique
   String incComunique()
   {
       return "insert into processo(comunique,logradouro_Coresp, n_Coresp, bairro_Coresp, cidade_Coresp, estado_Coresp, cep_Coresp, data_Coresp)" +
              "values('"+comunique+"','"+logradouro+"','"+n+"','"+bairro2+"','"+cidade+"','"+estado+"','"+cep+"','"+dt+"')";
   }
   public void insercaoC(){
       bd.updateBase(incComunique());
   }
    


  // inserção da tela Habite
    String incHabite()
     {
        return "insert into processo(tipoconstrucao, complemento, area, numprocaprovacaohabite, numhabhabite, observacaohabite,dataexpedicaohabite)" +
               "values('"+tp_construcao+","+complemento+","+area_habite+","+nm_aprovacao+","+nm_habite+","+observacao+","+dt_habite+"')";
    }
    public void insercaoH(){
        bd.updateBase(incHabite());
    }
    
    String incAlvara()
    {
        return "insert into processo(autordoprojeto, formacaoautorprojeto, creaspautorprojeto, artautorprojeto, inscmunicipalautorprojeto, tipoconstrucaoautorprojeto, complementoprojeto, areaalvprojeto, numalvaraprojeto)" +
               "values('"+nome1+","+formacao1+","+creasp+","+art+","+inscMunicipal1+","+tp_construcao+","+complemento+","+area+","+nm_alvaraProjeto+","+nm_alvaraConstrucao+"')";
    }

    public void insercaoAlv(){
        bd.updateBase(incAlvara());
}

    String incTecnicoResp()
    {
        return "insert into fiscal(responsaveltecnico, formacaoresptecnico, creaspresptecnico, artresptecnico, inscmunicipalresptecnico, tipoconstrucaoresptecnico, complementoconstrucao, area_alvConstrucao, numavaraconstrucao)" +
               "values('"+nome2+","+formacao2+","+creasp2+","+art2+","+inscMunicipal2+","+tp_construcao+","+complemento+","+area_alvconst+","+nm_alvaraConstrucao+"')";
    }

    public void insercaoTR(){
        bd.updateBase(incTecnicoResp());
    }

     //Inserção da tabela Andamentos
  String incTabelaAndamento()
     {
    try{
        ResultSet resultado = bd.consultaTable("select max(codandamento) from andamento");
        if(resultado!=null && resultado.next())
          do{
             cd_andamento = (resultado.getInt("codandamento"));
          }while(resultado.next());
    } catch (java.sql.SQLException e)
    {
        System.err.println("Erro de SQL: "+e.getMessage());
    }
    return "insert into andamentos(andamentos,saida, entrada,arquivado,expedicoes )" +
           "values('"+andamentos+","+dt_saida+","+dt_entrada+","+arquivado+","+expedicoes+"')";

  }

    public void insercaoTA(){
        bd.updateBase(incTabelaAndamento());

    }

     //inserção da tabela Fiscal
     String incCadastroFiscal()
     {
         return  "insert into fiscal(nome, matricula)" +
                 "values('"+fiscal+","+matricula+"')";
     }

     public void insercaoCF(){
         bd.updateBase(incCadastroFiscal());
     }

Desde já agradeço...

7 Respostas

L

Olá,

Na linha 78 a mensagem de sucesso é mostrada sempre, é preciso fazer uma verificação da variável execucaoOk.

Tem mais algumas melhorias que podem ser feitas na lógica, dê uma repassada no código.

[]'s
Luciano Rodrigues.

partenon

Sei que nao faz parte do topico, mas cuidado ao fazer concatenacao de valores que sao especificados diretamente pelo usuario. Por exemplo:

String incTramP(){ return "insert into processo(numprocesso,requerente, assunto, endereco, bairro, lote, loteamento, quadra, identcadastral)" + "values('"+processo+"','"+requerente+"','"+assunto+"','"+endereco+"','"+bairro+"','"+lote+"','"+loteamento+"','"+quadra+"','"+identCadastral+"')"; }

E se o seu usuario passou o valor “Fulano D’Avila” como “Requerente”? Isso daria um problema na hora de executar a SQL (alem de ser uma porta de entrada para problemas de seguranca, como SQL Injection) :slight_smile: Portanto, tente usar os metodos “setParameter” do PreparedStatement. Ou, melhor ainda, estude sobre ferramentas de ORM (como Hibernate).

JennyMelo

OI… vlw pelas dicas…
Este é o meu primeiro post e fico muito feliz pela rapidez das respostas. :smiley:
Mais em relação aos insert, como seria a forma correta de se fazer…desculpe a minha ignorancia mais
é que eu já tentei de tudo e nada funcionou, sou novata no mundo java e fico meio perdida. :oops:

ps: Estou usando o NetBeans 6.8 , Mysql 5.1 e o Xampp como servidor mysql

Desde já muito Obrigado!!!

JennyMelo

HELP…por favor…

partenon

Como disse, veja a API da classe PreparedStatement, especialmente os metodos setXXX:
http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/api/java/sql/PreparedStatement.html

Mas o melhor eh utilizar uma ferramenta ORM (provavelmente para os proximos projetos), como o Hibernate: http://www.hibernate.org/

JennyMelo

Oi…obrigado !!! Mais depois de tanto testar eu consegui realizar dois cadastros.
1º na tela principal…estou fazendo assim, e funcionou direitinho…

String sql1 = "INSERT INTO processo(numprocesso, anoprocesso,dataentrada, requerente, assunto, endereco, bairro, lote, loteamento, quadra, identificacaocadastral)" + "VALUES ('"+processo.getText().toString()+"','"+ano.getText().toString()+"','"+entrada.getText().toString()+"','"+requerente.getText().toString()+"','"+assunto.getText().toString()+"','"+endereco.getText().toString()+"','"+bairro.getText().toString()+"','"+lote.getText().toString()+"','"+loteamento.getText().toString()+"','"+quadra.getText().toString()+"','"+identCadastral.getText().toString()+"')"; bd.updateBase(sql1); String sql2 = "INSERT INTO andamentos(entrada,andamentos, saida,arquivado,expedicoes)" + "VALUES('"+entrada2.getText().toString()+"','"+andamento.getText().toString()+"','"+saida.getText().toString()+"','"+arquivado.getText().toString()+"','"+expedicao.getToolTipText().toString()+"')"; bd.updateBase(sql2);

2º na tela de cadastro fiscal…

String sql = "INSERT INTO fiscal (nome, matricula)" + "VALUES ('"+fiscal.getText().toString()+"','"+matricula.getText().toString()+"')"; bd.updateBase(sql);

Mais nas demais telas isso não funciona… é emitido o seguinte erro…

Será que alguem pode me ajudar…Desde já muito obrigado!!!
ps: o codigo ficou meio bagunçado quando postei…sorry

JennyMelo

Olá galera…
Depois de muitos testes finalmente consegui resolver o meu problema…
Ai esta o código:

//Grava os registros
        String com, lo, nu, b, ci, es, ce , dt;
        int p;
        String  ent = "", an = "", req ="", as="", end="", ba="", lot="", lotea="", q="", ident="";
        p = Integer.parseInt(processo.getText().toString());
        try{
            ResultSet resultado = bd.consultaTable("SELECT anoprocesso, dataentrada, requerente, assunto, endereco, bairro, lote, loteamento, quadra, identificacaocadastral FROM processo WHERE numprocesso = '"+p+"'");
            if(resultado != null && resultado.next())
                do{
                   an = (resultado.getString("anoprocesso")) ;
                   ano.setText(an);
                   dt = (resultado.getString("dataentrada"));
                   entrada.setText(dt);
                   req = (resultado.getString("requerente"));
                   requerente.setText(req);
                   as =  (resultado.getString("assunto"));
                   assunto.setText(as);
                   end = (resultado.getString("endereco"));
                   endereco.setText(end);
                   b = (resultado.getString("bairro"));
                   bairro.setText(b);
                   lot = (resultado.getString("lote"));
                   lote.setText(lot);
                   lotea = (resultado.getString("loteamento"));
                   loteamento.setText(lotea);
                   q = (resultado.getString("quadra"));
                   quadra.setText(q);
                   ident = (resultado.getString("identificacaocadastral"));
                   identCadastral.setText(ident);

                }while(resultado.next());
           else JOptionPane.showMessageDialog(null, "Processo não encontrado!", "Atenção", JOptionPane.ERROR_MESSAGE);
        }catch(java.sql.SQLException e){
            System.err.println("Erro de SQL:"+e.getMessage());
        }     
            com = comunique.getText().toString();
            lo = logradouro.getText().toString();
            nu = num.getText().toString();
            b = bairro2.getText().toString();
            ci = cidade.getText().toString();
            es = estado.getSelectedItem().toString();
            ce = cep.getText().toString();
            dt = data.getText().toString();

                    String sql= "UPDATE processo SET anoprocesso = '"+an+"',dataentrada ='"+ent+"',requerente ='"+req+"',assunto ='"+as+"',endereco='"+end+"',bairro='"+b+"',lote='"+lot+"',loteamento='"+lotea+"', quadra='"+q+"', identificacaocadastral='"+ident+"', comunique ='"+com+"', logradouro_coresp ='"+lo+"', n_coresp = '"+nu+"', bairro_coresp = '"+b+"', cidade_coresp = '"+ci+"',estado_coresp = '"+es+"', cep_coresp = '"+ce+"', data_coresp = '"+dt+"'"+
                                "WHERE numprocesso = '"+p+"'";
                    bd.updateBase(sql);

Quero agradecer a todos q responderam… at a proxima :smiley:

Criado 30 de junho de 2010
Ultima resposta 17 de ago. de 2010
Respostas 7
Participantes 3