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
[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…