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();
}
publicstaticvoidmain(String[]args){DAOAlunoaAluno=newDAOAluno();Alunoa=newAluno();Scannerteclado=newScanner(System.in);System.out.println("CADASTRO DE ALUNO");System.out.println("Digite o RA: ");intra=Integer.parseInt(teclado.nextLine());System.out.println("Digite o Nome: ");Stringn=teclado.nextLine();System.out.println("Digite o Endereço ");Stringend=teclado.nextLine();System.out.println("Digite o Telefone:");Stringfone=teclado.nextLine();a.setRa(ra);a.setNome(n);a.setEndereco(end);a.setTelefone(fone);aAluno.cadastrarAluno(a);//essa é a linha 34}
Ignore a 34, a boa é a 43:
at dao.DAOAluno.cadastrarAluno(DAOAluno.java:43)
L
LuanaFranca
então, foi a unica coisa que meu professor falou, que o erro esta nessa linha, mas eu não consigo acha-lo.
R
rof20004
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
LuanaFranca
estou usando o statment
publicclassDAOConectar{protectedStatementstm;protectedConnectioncon;protectedResultSetrs;protectedvoidConectar()throwsSQLException{//o protected só pode ser acessado pelas classes filhastry{Class.forName("oracle.jdbc.OracleDriver");con=DriverManager.getConnection("jdbc:oracle:thin:aluno/aluno@//localhost:1521/XE");stm=con.createStatement();}catch(ClassNotFoundExceptione){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
LuanaFranca
tinha postado o método onde esta o erro, mas vou postar o código inteiro.
publicclassDAOAlunoextendsDAOConectar{publicvoidbuscaxaorAlunoPorId(Alunoal,intra){try{Conectar();Stringsql="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(Exceptione){e.printStackTrace();}}publicvoidcadastrarAluno(Alunoal){try{Conectar();Stringsql="insert into cliente values("+al.getRa()+", '"+al.getNome()+", '"+al.getEndereco()+", '"+al.getTelefone()+"')";stm.executeQuery(sql);//linhacomerrocon.close();}catch(Exceptione){e.printStackTrace();}}publicvoidAtualizarAluno(Alunoal)throwsSQLException{try{Conectar();Stringsql="update aluno set ("+" nome = '"+al.getNome()+"',"+" endereco = '"+al.getEndereco()+"', "+" telefone = '"+al.getTelefone()+"' "+" where ra = "+al.getRa()+")";//stm.execute(sql);con.close();}catch(Exceptione){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
LuanaFranca
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
LuanaFranca
publicclassDAOConectar{protectedStatementstm;protectedConnectioncon;protectedResultSetrs;protectedvoidConectar()throwsSQLException{try{Class.forName("oracle.jdbc.OracleDriver");con=DriverManager.getConnection("jdbc:oracle:thin:aluno/aluno@//localhost:1521/XE");stm=con.createStatement();}catch(ClassNotFoundExceptione){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
LuanaFranca
sem progressos ainda aqui, vou analisar mais a fundo, tentar arrumar e comento aqui assim que conseguir.
Obrigada
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…
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
windsofhell
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:
...
DigiteoEndereçohbdhghrthgDigiteoTelefone:34523456Itcan'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.
Na ultima stacktrace que ela postou confirma que o driver nao esta sendo carregado:
Itcan't connect to the database java.lang.ClassNotFoundException:oracle.jdbc.OracleDriveratjava.net.URLClassLoader$1.run(URLClassLoader.java:202)atjava.security.AccessController.doPrivileged(NativeMethod)atjava.net.URLClassLoader.findClass(URLClassLoader.java:190)atjava.lang.ClassLoader.loadClass(ClassLoader.java:306)atsun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)atjava.lang.ClassLoader.loadClass(ClassLoader.java:247)atjava.lang.Class.forName0(NativeMethod)atjava.lang.Class.forName(Class.java:169)atdao.DAOConectar.Conectar(DAOConectar.java:20)atdao.DAOAluno.cadastrarAluno(DAOAluno.java:3ataapprojeto.AapProjeto.main(AapProjeto.java:34)java.lang.NullPointerExceptionatdao.DAOAluno.cadastrarAluno(DAOAluno.java:45)ataapprojeto.AapProjeto.main(AapProjeto.java:34)CONSTRUÍDOCOMSUCESSO(tempototal:11segundos)
Entao o alves.Felipe, esta correto. Instala o driver e provavelmente vc vai resolver o problema.