It can't connect to the database

Alguem pode me dizer porque não esta conectando com o banco?

CADASTRO DE ALUNO
Digite o RA:
45245466
Digite o Nome:
ffhgbgbghj
Digite o Endereço
hbdhghrthg
Digite o Telefone:
34523456
It can’t connect to the database
java.lang.NullPointerException
at dao.DAOAluno.cadastrarAluno(DAOAluno.java:43)
at aapprojeto.AapProjeto.main(AapProjeto.java:34)

método cadastrar:

public void cadastrarAluno(Aluno al){ try{ Conectar(); String sql = "insert into cliente values(" +al.getRa()+", '" +al.getNome()+", '" +al.getEndereco()+", '" +al.getTelefone()+"')"; stm.execute(sql); //essa é a linha 43 con.close(); }catch (Exception e){ e.printStackTrace(); }

 public static void main(String[] args) {
        DAOAluno aAluno = new DAOAluno(); 
        Aluno a = new Aluno();
        
	Scanner teclado = new Scanner(System.in);
        System.out.println("CADASTRO DE ALUNO");
	System.out.println("Digite o RA: ");  
	int ra = Integer.parseInt(teclado.nextLine());  
	System.out.println("Digite o Nome: ");  
	String n = teclado.nextLine(); 
        System.out.println("Digite o Endereço ");  
	String end = teclado.nextLine();
        System.out.println("Digite o Telefone:");
	String fone  = teclado.nextLine();
       
        a.setRa(ra);
        a.setNome(n);
        a.setEndereco(end);
        a.setTelefone(fone);
        aAluno.cadastrarAluno(a); //essa é a linha 34
    
    }

Obrigada

Por favor, quando for postar código, o coloque entre as tags

Em relação ao seu problema, o que está na linha 43 da classe DAOAluno?

Eu posso dizer por que.

Por causa disso aqui:
java.lang.NullPointerException
at dao.DAOAluno.cadastrarAluno(DAOAluno.java:43)

O que tem nessa linha?

então não sei o que tem nessa linha.
depois que eu executo e coloco os dados aparece esse erro

It can’t connect to the database
java.lang.NullPointerException
at dao.DAOAluno.cadastrarAluno(DAOAluno.java:43)
at aapprojeto.AapProjeto.main(AapProjeto.java:34)

um na linha 43 outro na 34

Se você não sabe, imagine eu?

Ignore a 34, a boa é a 43:
at dao.DAOAluno.cadastrarAluno(DAOAluno.java:43)

então, foi a unica coisa que meu professor falou, que o erro esta nessa linha, mas eu não consigo acha-lo.

stm.execute(sql); 

Esta usando Statement ? PreparedStatement ?

Onde esta instanciando-o ?

Troque o execute pelo executeQuery e veja o que acontece.

Boa Sorte, e aprenda a ler seu codigo, é chato alguem pedir ajuda sobre algum trabalho de aula e querer que o pessoal resolva.

estou usando o statment

public class DAOConectar {
    protected Statement stm;
    protected Connection con;
    protected ResultSet rs;
    
    protected void Conectar() throws SQLException{//o protected só pode ser acessado pelas classes filhas
	try{
		Class.forName("oracle.jdbc.OracleDriver");
		con = DriverManager.getConnection("jdbc:oracle:thin:aluno/aluno@//localhost:1521/XE");
		stm = con.createStatement();
		
	}catch (ClassNotFoundException e) {  
            System.out.println("It can't connect to the database");  
        
    }
    }

troquei pelo executeQuery e não mudou nada.
Preciso aprender a ler o código mesmo, e não quero que ninguem resolva por mim, pedi uma ajuda para tentar entender que erro é esse.

Obrigada

[quote=LuanaFranca]então, foi a unica coisa que meu professor falou, que o erro esta nessa linha, mas eu não consigo acha-lo.

[/quote]
Por gentileza, poste o código e indique qual é a linha 43.
Assim podemos analisar e te indicar qual o possível motivo do erro.

tinha postado o método onde esta o erro, mas vou postar o código inteiro.

[code]public class DAOAluno extends DAOConectar {

public void buscaxaorAlunoPorId(Aluno al, int ra){
    try{
	Conectar();
	String sql = "select * from aluno where ra = " +ra;
	rs = stm.executeQuery(sql);
	rs.next(); 
	al.setRa(rs.getInt("ra"));
	al.setNome(rs.getString("nome"));
            al.setEndereco(rs.getString("endereco"));
            al.setTelefone(rs.getString("telefone"));
            
	con.close();

}catch(Exception e){
e.printStackTrace();
}
}

public void cadastrarAluno(Aluno al){
    try{
	Conectar();
	String sql = 
                    "insert into cliente values(" +al.getRa()+", '" 
                                                  +al.getNome()+", '"
                                                  +al.getEndereco()+", '"
                                                  +al.getTelefone()+"')";
	stm.executeQuery(sql); //linha com erro
	con.close();
}catch (Exception e){
	e.printStackTrace();
}
    
}
           
public void AtualizarAluno(Aluno al) throws SQLException{
    try{
        Conectar();
        
        String sql = "update aluno set ("
            + " nome = '"+ al.getNome() +"',"
            + " endereco = '"+al.getEndereco()+"', "
            + " telefone = '"+al.getTelefone()+"' "
            + " where ra = "+al.getRa()+")";
                 
        //stm.execute(sql);
        con.close();
}catch (Exception e){
        e.printStackTrace();
}
}

[/code]

O erro ocorre pois stm é nulo e você chama o método executeQuery.

Se o stm é um objeto de Statement

stm = con.createStatement();

Se stm é um objeto de PreparedStatement

stm = con.prepareStatement(sql);

o original estava com execute, e troquei para executeQuery para testar. Mas não muda nada.

Se você não instanciar o stm, invocar qualquer método será inútil.
Veja o que disse na resposta anterior…

vc esta com a biblioteca do Oracle para conectar?
“oracle.jdbc.OracleDriver”

[quote=alves.Felipe]vc esta com a biblioteca do Oracle para conectar?
“oracle.jdbc.OracleDriver”[/quote]

Camarada, o que isso tem a ver com um nullpointerexception quando ela invoca o método execute ou executeQuery de um objeto stm que não foi instanciado?

public class DAOConectar {
    protected Statement stm;
    protected Connection con;
    protected ResultSet rs;
    
    protected void Conectar() throws SQLException{
	try{
		Class.forName("oracle.jdbc.OracleDriver");
		con = DriverManager.getConnection("jdbc:oracle:thin:aluno/aluno@//localhost:1521/XE");
		stm = con.createStatement();
		
	}catch (ClassNotFoundException e) {  
            System.out.println("It can't connect to the database");  
        
    }
    }

Assim???

Não, em cada um dos métodos, antes do

stm.execute();
//ou 
stm.executeQuery();

sem progressos ainda aqui, vou analisar mais a fundo, tentar arrumar e comento aqui assim que conseguir.

Obrigada

:slight_smile:

[quote=drsmachado][quote=alves.Felipe]vc esta com a biblioteca do Oracle para conectar?
“oracle.jdbc.OracleDriver”[/quote]

Camarada, o que isso tem a ver com um nullpointerexception quando ela invoca o método execute ou executeQuery de um objeto stm que não foi instanciado?[/quote]
Olha o título do post dela e olha o tratamento da exceção do método Conectar da classe DAOConectar…
vai tentar fazer a conexão, da excecao, não é tratada e quando ela vai tentar usar o stm.executeQuery(sql); vai dar nulpointer por causa que não
criou o statement no método conectar…

LuanaFranca,
deixa assim o método Conectar:

[code]
protected void Conectar() throws SQLException{
try{
Class.forName(“oracle.jdbc.OracleDriver”);
con = DriverManager.getConnection(“jdbc:oracle:thin:aluno/aluno@//localhost:1521/XE”);
stm = con.createStatement();

}catch (ClassNotFoundException e) {    
        System.out.println("It can't connect to the database");   
        e.printStackTrace();
      
}  
} [/code]

e mostra o erro novamente…