It can't connect to the database

23 respostas
L

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

23 Respostas

Rodrigo_Sasaki

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?

Hebert_Coelho

Eu posso dizer por que.

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

O que tem nessa linha?

L

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

It cant 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

Hebert_Coelho

Se você não sabe, imagine eu?

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

L

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

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

L

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

drsmachado

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


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.

L

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

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();
	}
    }
drsmachado

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);
L

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

drsmachado

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

alves.Felipe

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

drsmachado

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

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?

L
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???

drsmachado

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

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

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

Obrigada

:slight_smile:

alves.Felipe

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

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?


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…

alves.Felipe
LuanaFranca, deixa assim o método Conectar:
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();
          
    }  
    }
e mostra o erro novamente...
L
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();  
            
    }    
    }
It cant connect to the database

java.lang.ClassNotFoundException: oracle.jdbc.OracleDriver

at java.net.URLClassLoader$1.run(URLClassLoader.java:202)

at java.security.AccessController.doPrivileged(Native Method)

at java.net.URLClassLoader.findClass(URLClassLoader.java:190)

at java.lang.ClassLoader.loadClass(ClassLoader.java:306)

at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)

at java.lang.ClassLoader.loadClass(ClassLoader.java:247)

at java.lang.Class.forName0(Native Method)

at java.lang.Class.forName(Class.java:169)

at dao.DAOConectar.Conectar(DAOConectar.java:20)

at dao.DAOAluno.cadastrarAluno(DAOAluno.java:38)

at aapprojeto.AapProjeto.main(AapProjeto.java:34)

java.lang.NullPointerException

at dao.DAOAluno.cadastrarAluno(DAOAluno.java:45)

at aapprojeto.AapProjeto.main(AapProjeto.java:34)

CONSTRUÍDO COM SUCESSO (tempo total: 11 segundos)
alves.Felipe

como eu tinha dito antes,
Luana, você precisa baixar o driver de conexão do Oracle
http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html
baixa e importa no seu projeto que vai parar de dar este erro.

L

Tinha perdido a biblioteca JDBC no meu projeto, deve ser porque atualizei a versão.

Já tinha o arquivo, foi só importar para o NetBeans e está tudo certo.

Obrigada.

W

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

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?

Eu acho que tem a ver sim, se vc olhar erro:

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

A ClassNotFoundException esta sendo disparada: “It can’t connect to the database”.
Se o driver nao esta sendo carregado corretamente nada vai funcionar.

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");    
          
    }  
}

Na ultima stacktrace que ela postou confirma que o driver nao esta sendo carregado:

It can't connect to the database 
java.lang.ClassNotFoundException: oracle.jdbc.OracleDriver 
at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Class.java:169) 
at dao.DAOConectar.Conectar(DAOConectar.java:20) 
at dao.DAOAluno.cadastrarAluno(DAOAluno.java:3 
at aapprojeto.AapProjeto.main(AapProjeto.java:34) 
java.lang.NullPointerException 
at dao.DAOAluno.cadastrarAluno(DAOAluno.java:45) 
at aapprojeto.AapProjeto.main(AapProjeto.java:34) 
CONSTRUÍDO COM SUCESSO (tempo total: 11 segundos)

Entao o alves.Felipe, esta correto. Instala o driver e provavelmente vc vai resolver o problema.

Criado 7 de novembro de 2012
Ultima resposta 20 de nov. de 2012
Respostas 23
Participantes 7