Estou tentando fazer um Insert com PreparedStatement e tá dando nullpointerexception na linha 7, existe algum erro no código?
Obrigado.
publicvoidinserir(Stringnome,Stringendereco,Stringuf){Stringsql;sql="INSERT INTO cadastro(nome, endereco, uf)"+" VALUES(?,?,?)";try{PreparedStatementpstmt=con.prepareStatement(sql);// ERRO AQUI!pstmt.setString(1,nome);pstmt.setString(2,endereco);pstmt.setString(3,uf);System.out.println(sql);//confirmaçãopstmt.executeUpdate();// não vai sql dentro dos parentesesJOptionPane.showMessageDialog(null,"Cadastro adicionado.");}
obs: a tabela tem um id só que como é autonumeração não coloquei.
Certifique-se que o objeto Connection foi instanciado, pelo que ví, o objeto null é o con.
Onde ele é declarado???
onde ele é instanciado???
Ví que não é nesse método!
Nykolas_Lima
exatamente, verifique o objeto de conexão.
As vezes voce está tratando caso haja algum erro ao conectar, e ele está retornando uma conexão null e você não ercebeu ou voce simplesmente não está instanciando uma conexao.
Provavelemente é isso…
falou
H
hmoleman
O con está dentro da classe mas fora do método.
O que eu faço é:
abrir conexão
inserir()
fechar conexão
publicclassMetodos{privateStatementstmt;privateResultSetrs;privateConnectioncon;publicvoidinserir(Stringnome,Stringendereco,Stringuf){Stringsql;sql="INSERT INTO cadastro(nome, endereco, uf)"+" VALUES(?,?,?)";try{PreparedStatementpstmt=con.prepareStatement(sql);pstmt.setString(1,nome);pstmt.setString(2,endereco);pstmt.setString(3,uf);System.out.println(sql);//confirmaçãopstmt.executeUpdate();JOptionPane.showMessageDialog(null,"Cadastro adicionado.");}catch(Exceptione){JOptionPane.showMessageDialog(null,"Erro na operacao requisitada\n"+e.toString(),"Alerta",JOptionPane.INFORMATION_MESSAGE);}}}
igor_jua
Experimente abrir a conexão no inicio do método e fecha-la com um finally neste!
Mero_Aprendiz
hmoleman:
O con está dentro da classe mas fora do método.
O que eu faço é:
abrir conexão
inserir()
fechar conexão
publicclassMetodos{privateStatementstmt;privateResultSetrs;privateConnectioncon;publicvoidinserir(Stringnome,Stringendereco,Stringuf){Stringsql;sql="INSERT INTO cadastro(nome, endereco, uf)"+" VALUES(?,?,?)";try{PreparedStatementpstmt=con.prepareStatement(sql);pstmt.setString(1,nome);pstmt.setString(2,endereco);pstmt.setString(3,uf);System.out.println(sql);//confirmaçãopstmt.executeUpdate();JOptionPane.showMessageDialog(null,"Cadastro adicionado.");}catch(Exceptione){JOptionPane.showMessageDialog(null,"Erro na operacao requisitada\n"+e.toString(),"Alerta",JOptionPane.INFORMATION_MESSAGE);}}}
Olá.
Posta pra gente o trecho no seu código que você faz a conexão com o banco de dados.
[]'s
JL
H
hmoleman
sempre dá conexão bem sucedida.
publicclassConexoes{privatestaticConnectioncon;privatestaticStatementstmt;publicstaticvoidconectar(){try{Class.forName("com.mysql.jdbc.Driver");con=DriverManager.getConnection("jdbc:mysql://localhost:3306/bancoMysql","","");stmt=con.createStatement();System.out.println("-------> Conexão bem sucedida! <-------");}catch(Exceptione)...
H
hmoleman
Pois é, quando faço o debug e passo pelo con do prepareStatement
PreparedStatementpstmt=con.prepareStatement(sql);
ele indica con=null
luisgarcia173
Então… Sinceramente não sei o que está fazendo, pois não vi você instanciando o método de conexão, ou seja, a variável con ainda está nula.
Não sei se seria interessante para você alterar o seu método para retornar uma conexão:
privatefinalStringINSERE_CADASTRO="INSERT INTO cadastro(nome, endereco, uf)"+" VALUES(?,?,?)";publicvoidinserir(Stringnome,Stringendereco,Stringuf){try{con=Conexoes.getConnection();PreparedStatementpstmt=con.prepareStatement(INSERE_CADASTRO);pstmt.setString(1,nome);pstmt.setString(2,endereco);pstmt.setString(3,uf);System.out.println(INSERE_CADASTRO);//confirmação pstmt.executeUpdate();JOptionPane.showMessageDialog(null,"Cadastro adicionado.");}catch(Exceptione){JOptionPane.showMessageDialog(null,"Erro na operacao requisitada\n"+e.toString(),"Alerta",JOptionPane.INFORMATION_MESSAGE);}finally{Conexoes.closeConnection(con);}}
H
hmoleman
O que fiz e deu certo foi o seguinte:
Tornei minha classe Conexoes abstrata
Extendi a classe Conexoes dentro de Metodos(onde tá meu metodo inserir())
Chamei conectar() dentro da classe Metodos.
Ficou assim:
publicclassMetodosextendsConexoes{publicvoidinserir(Stringnome,Stringendereco,Stringuf){Stringsql;sql="INSERT INTO cadastro(nome, endereco, uf)"+" VALUES(?,?,?)";try{conectar();PreparedStatementpstmt=con.prepareStatement(sql);pstmt.setString(1,nome);pstmt.setString(2,endereco);pstmt.setString(3,uf);System.out.println(sql);pstmt.executeUpdate();JOptionPane.showMessageDialog(null,"Cadastro adicionado.");}catch(Exceptione){JOptionPane.showMessageDialog(null,"Erro na operacao requisitada\n"+e.toString(),"Alerta",JOptionPane.INFORMATION_MESSAGE);}finally{Conexoes.desconectar();}}
Espero que isso não fira nenhum mandamento Java :).