Galera, fiz esse mesmo tópico hà umas duas semanas, só que fiquei sem internet nesse período e não pude acompanhar meu tópico.
Em fim, o problema é o seguinte:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
public class Funcionario extends Pessoa {
private String funcao;
private double diaria,salarioFixo,valorHoraExtra,faltas,sabados,salarioFinal,vale;
private int contaFuncionario;
private Connection conn;
//METODO PARA CONECTAR AO BANCO DE DADOS//////
public void conetarBanco(){
String driver = "com.mysql.jdbc.Driver";
String user = "root";
String pass = "root";
String urlPadrao = "jdbc:mysql://localhost:3306/mysql";
try{
Class.forName(driver);
conn = DriverManager.getConnection(urlPadrao,user,pass);
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
System.out.println("Conexão estabelecida com sucesso");
}
////////////METODO CADASTRAR/////////////
public void cadastro(){
//criarObjeto();
Scanner dado=new Scanner(System.in);
Scanner dado2=new Scanner(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());
Funcionario f = new Funcionario();
f.conetarBanco();
//String query = "INSERT INTO funcionario (Funcao, nome, CPF, Endereco) values (?,?,?,?)";
PreparedStatement stm;
try {
stm = conn.prepareStatement("INSERT INTO funcionario (Funcao, nome, CPF, Endereco) values (?,?,?,?)");
stm.setString(1, getNome());
stm.setString(2, getEndereco());
stm.setString(3, funcao);
stm.setString(4, getCpf());
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
////////////////METODO ALTERAR CADASTRO///////////////////
public void alterarCadastro(){
Scanner dado=new Scanner(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!");
int opcao;
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///////////////////////////////
public void calculaSalario(){
Scanner dado=new Scanner(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);
}else if (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);
}else if(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//////////
public void imprimeInformacao(){
System.out.println("Nome: "+getNome());
System.out.println("CPF: "+getCpf());
System.out.println("Endereço: "+getEndereco());
System.out.println("Idade: "+getIdade());
}
public double getFaltas() {
return faltas;
}
public void setFaltas(double faltas) {
this.faltas = faltas;
}
public double getVale() {
return vale;
}
public void setVale(double vale) {
this.vale = vale;
}
public Funcionario(String funcao){
this.funcao=funcao;
}
public Funcionario(){
}
}
O erro é um NullPointer Exception:
Conexão estabelecida com sucesso
Exception in thread "main" java.lang.NullPointerException
at perfaco.pagamento.Funcionario.cadastro(Funcionario.java:57)
at perfaco.pagamento.TestaConexao.main(TestaConexao.java:9)
stm = conn.prepareStatement("INSERT INTO funcionario (Funcao, nome, CPF, Endereco) values (?,?,?,?)");
f.cadastro()
public class TestaConexao {
public static void main(String[] args) {
Funcionario f = new Funcionario();
f.cadastro();
}
}
Se puderem, me ajudem a identificar o porque do nullPointer, ja pesquisei na net e em alguns livros que tenho aqui, porém não consegui encontrar a solução para o problema.
Valeu a ajuda

