Gostaria que a galera me explicasse porque está dando NullPointer no meu método abaixo:
publicvoidcadastro(){//criarObjeto();Scannerdado=newScanner(System.in);Scannerdado2=newScanner(System.in);System.out.println("Digite a função ");this.funcao=dado.next().toUpperCase();System.out.println();System.out.println("Digite o nome: ");setNome(dado.next());System.out.println();System.out.println("Digite o CPF");setCpf(dado.next());System.out.println("Digite a idade do funcionario");setIdade(dado.nextInt());System.out.println();System.out.println("Digite o endereço do funcionario");setEndereco(dado2.nextLine());Funcionariof=newFuncionario();f.conetarBanco();Stringquery="INSERT INTO funcionario (Funcao, nome, CPF, Endereco) values (?,?,?,?)";PreparedStatementstm;try{stm=conn.prepareStatement(query);stm.setString(1,getNome());stm.setString(2,getEndereco());stm.setString(3,funcao);stm.setString(4,getCpf());}catch(SQLExceptione){// TODO Auto-generated catch blocke.printStackTrace();}}
Erro:
Exception in thread "main" java.lang.NullPointerException
at perfaco.pagamento.Funcionario.cadastro(Funcionario.java:57)
at perfaco.pagamento.TestaConexao.main(TestaConexao.java:9)
O NullPointer aparece quando eu executo o método na minha classe TestaConeao e aponta p/ o atributo query que eu criei!
em qual linha do método cadastro() que estoura o null pointer?
ali diz que é na linha 57 da classe Funcionário
mas como você so colocou o método não da para saber a linha exata.
I
igor_henrique1
Estou com uma leve impressão de que é nessa linha
stm=conn.prepareStatement(query);
vc instanciou o seu objeto conn antes de chama-lo aqui?
E
eliezerbs9
Isso mesmo.
Nessa Linha ai!
stm = conn.prepareStatement(query);
I
igor_henrique1
bem possível então que vc não fez um conn = new Connection…(ou algo assim, não uso preparedStatemente então nem lembro)
posta o código inteiro.
E
eliezerbs9
packageperfaco.pagamento;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.SQLException;importjava.sql.Statement;importjava.util.Scanner;publicclassFuncionarioextendsPessoa{privateStringfuncao;privatedoublediaria,salarioFixo,valorHoraExtra,faltas,sabados,salarioFinal,vale;privateintcontaFuncionario;privateConnectionconn;//METODO PARA CONECTAR AO BANCO DE DADOS//////publicvoidconetarBanco(){Stringdriver="com.mysql.jdbc.Driver";Stringuser="root";Stringpass="root";StringurlPadrao="jdbc:mysql://localhost:3306/mysql";try{Class.forName(driver);conn=DriverManager.getConnection(urlPadrao,user,pass);}catch(SQLExceptione){e.printStackTrace();}catch(ClassNotFoundExceptione){e.printStackTrace();}System.out.println("Conexão estabelecida com sucesso");}////////////METODO CADASTRAR/////////////publicvoidcadastro(){//criarObjeto();Scannerdado=newScanner(System.in);Scannerdado2=newScanner(System.in);System.out.println("Digite a função ");this.funcao=dado.next().toUpperCase();System.out.println();System.out.println("Digite o nome: ");setNome(dado.next());System.out.println();System.out.println("Digite o CPF");setCpf(dado.next());System.out.println("Digite a idade do funcionario");setIdade(dado.nextInt());System.out.println();System.out.println("Digite o endereço do funcionario");setEndereco(dado2.nextLine());Funcionariof=newFuncionario();f.conetarBanco();Stringquery="INSERT INTO funcionario (Funcao, nome, CPF, Endereco) values (?,?,?,?)";PreparedStatementstm;try{stm=conn.prepareStatement(query);stm.setString(1,getNome());stm.setString(2,getEndereco());stm.setString(3,funcao);stm.setString(4,getCpf());}catch(SQLExceptione){// TODO Auto-generated catch blocke.printStackTrace();}}////////////////METODO ALTERAR CADASTRO///////////////////publicvoidalterarCadastro(){Scannerdado=newScanner(System.in);while(true){System.out.println("O QUE DESEJA ALTERAR? ");System.out.println();System.out.println("1- Função");System.out.println("2- Nome");System.out.println("3- CPF");System.out.println("4- Endereço");System.out.println("9- FIM!");intopcao;opcao=dado.nextInt();if(opcao==9){break;}else{switch(opcao){case'1':System.out.println("DIGITE A NOVA FUNÇÃO");this.funcao=dado.next();break;case'2':System.out.println("Digite o nome");setNome(dado.next());break;case'3':System.out.println("Digite o CPF");setCpf(dado.next());break;case'4':System.out.println("Digite o endereço");setEndereco(dado.next());default:System.out.println("Opção inválida, tente novamente");}}}}////////////METODO CALCULAR SALARIO/////////////////////////////// publicvoidcalculaSalario(){Scannerdado=newScanner(System.in);if(funcao.equalsIgnoreCase("ESTAGIÁRIO")){this.salarioFixo=600;this.diaria=this.salarioFixo/30;System.out.println("Quantos sábados o Funcionario trabalhou?");this.sabados=dado.nextDouble();this.salarioFinal=this.salarioFixo-(this.faltas*this.diaria)+(this.sabados*this.valorHoraExtra)-(this.vale);System.out.println(this.salarioFinal);}elseif(funcao.equalsIgnoreCase("MOTORISTA")){this.salarioFixo=1000;this.diaria=this.salarioFixo/30;System.out.println("Quantos sábados o Funcionario trabalhou?");this.sabados=dado.nextDouble();this.salarioFinal=this.salarioFixo-(this.faltas*this.diaria)+(this.sabados*this.valorHoraExtra)-(this.vale);System.out.println(this.salarioFinal);}elseif(funcao.equalsIgnoreCase("GERENTE")){this.salarioFixo=2500;this.diaria=this.salarioFixo/30;System.out.println("Quantos sábados o Funcionario trabalhou?");this.sabados=dado.nextDouble();this.salarioFinal=this.salarioFixo-(this.faltas*this.diaria)+(this.sabados*this.valorHoraExtra)-(this.vale);System.out.println(this.salarioFinal);}}///////////////IMPRIME INFORMAÇÕES DO FUNCIONARIO//////////publicvoidimprimeInformacao(){System.out.println("Nome: "+getNome());System.out.println("CPF: "+getCpf());System.out.println("Endereço: "+getEndereco());System.out.println("Idade: "+getIdade());}publicdoublegetFaltas(){returnfaltas;}publicvoidsetFaltas(doublefaltas){this.faltas=faltas;}publicdoublegetVale(){returnvale;}publicvoidsetVale(doublevale){this.vale=vale;}publicFuncionario(Stringfuncao){this.funcao=funcao;}publicFuncionario(){}}
Não consegui instanciar o conn.
Valeu a ajuda cara!
marcosharbs
o nullpointer ocorre nesta linha
stm=conn.prepareStatement(query);
provavelmente sua variável conn está nula
você está abrindo uma conexão com o banco?
I
igor_henrique1
Cara, isso tudo é uma classe só? se for, eu acho que saquei o problema, ta aqui ó
nessa linha tu instancia o conn conn = DriverManager.getConnection(urlPadrao,user,pass);
essa linha ai está dentro do método conectarBanco() então bastaria que vc chamasse o método para que o conn fosse instanciado, porém o que vc faz, cria um novo objeto Funcionário e chama o método através dele, com isso o conn instanciado é outro e não o que vc quer mecher, quando na linha do erro vc chama o conn, ele da null pointer, pq naquele objeto que vc está manipulando ele não foi instanciado.
Tenta fazerconectarBanco(); ao invés de Funcionario f = new Funcionario();
f.conetarBanco();
lucasportela
Por que instanciou Funcionario para chamar a conexao se você pode chamar o método de conexão sem instanciar?