Erro ao inserir novo Registro no Mysql

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

[code]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());
}
}[/code]

*E esta é a classe com os insert…segue

[code]//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());
 }[/code]

Desde já agradeço…

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.

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).

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!!!

HELP…por favor…

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/

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

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: