Nao consigo resolver

12 respostas
F

[color=olive]Não consigo resolver esse erro. :(: [/color]

java.lang.NullPointerException
	DAO.UsuarioDAO.incluir(UsuarioDAO.java:22)
	control.Control.doGet(Control.java:42)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
A linha é essa aqui:
PreparedStatement stmt = Connection.prepareStatement("insert into usuario (cpf, nome, dataNasc, rg, sexo, email, login, senha) values (?, ?, ?, ?, ?, ?, ?, ?)");

Detalhe que a aplicação funciona normalmente quando rodo internamente, mas quando tento no servlet ela falha.

12 Respostas

Pedrosa

Algum parametro vindo null na linha UsuarioDAO.java:22, o que tem nessa linha?

peczenyj

Pense assim:

AlgumaClasse obj = null; obj.algumMetodo(argumentos);

O que vai acontecer quando vc executar este código?

Um null pointer exception.

Agora, veja nessa linha que acontece o erro e verifique o motivo pelo qual alguma coisa assim aconteceria.

Por exemplo, será que vc conseguiu fazer a conexão com o banco de dados?

Veja se Connection é nulo

if (Connection ==null) { … }

H

A primeira opinião é que a classe UsuarioDao não foi instanciada. E em segunda a classe Connection.

F
peczenyj:
Pense assim:
AlgumaClasse obj = null;
obj.algumMetodo(argumentos);

O que vai acontecer quando vc executar este código?

Um null pointer exception.

Agora, veja nessa linha que acontece o erro e verifique o motivo pelo qual alguma coisa assim aconteceria.

Por exemplo, será que vc conseguiu fazer a conexão com o banco de dados?

Veja se Connection é nulo

if (Connection ==null) { ... }

cara o lance é esse mesmo, minha conexão ta ficando nula, mas não sei pq, pois estou instanciando ela, e na não ela ta no constructor dela, e nao consigo resolver, olha aqui os codigos.
package model;

import java.sql.*;

public class Conection {

private static final String URL = "jdbc:mysql://localhost/nh";
private static final String DRIVER = "com.mysql.jdbc.Driver";
private static final String USUARIO = "root";
private static final String SENHA = "admin";

public static Connection getConnection() throws SQLException {
	try {
		Class.forName(DRIVER);
		return
		DriverManager.getConnection(URL,USUARIO,SENHA);
		} catch (ClassNotFoundException e) {
			throw new SQLException(e.getMessage());
		}
	}

}
package DAO;

import model.*;
import java.sql.*;

public class UsuarioDAO {

// a conexão com o banco de dados

private Connection Connection ;
public UsuarioDAO() throws SQLException {
      this.Connection = Conection.getConnection();
}

	public void incluir(Usuario usuario) throws SQLException {

		// prepared statement para inserção
		PreparedStatement stmt = Connection.prepareStatement("insert into usuario (cpf, nome, dataNasc, rg, sexo, email, login, senha) values (?, ?, ?, ?, ?, ?, ?, ?)");

		// seta os valores
		stmt.setInt(1,usuario.getCpf());
		stmt.setString(2,usuario.getNome());
		stmt.setString(3,usuario.getDataNasc());
		stmt.setInt(4,usuario.getRg());
		stmt.setString(5,usuario.getSexo());
		stmt.setString(6,usuario.getEmail());
		stmt.setString(7,usuario.getLogin());
		stmt.setString(8,usuario.getSenha());
		// executa
		stmt.execute();
		stmt.close();

	}
}
peczenyj

public UsuarioDAO() throws SQLException { try{ this.Connection = Conection.getConnection(); } catch (SQLException e) { } }

Ok, me explique uma coisa, SE Conection.getConnection() lançar uma SQLException o que vai acontecer com ela?

F

peczenyj:
public UsuarioDAO() throws SQLException { try{ this.Connection = Conection.getConnection(); } catch (SQLException e) { } }

Ok, me explique uma coisa, SE Conection.getConnection() lançar uma SQLException o que vai acontecer com ela?

sei la amigo eu so bem noobao em java :frowning:

peczenyj

então vamos lá

try{ this.Connection = Conection.getConnection(); } catch (SQLException e) { /*alguma coisa*/ }

um bloco try/catch funciona assim:

se alguma instrução dentro do bloco try lançar uma exception, ela pode ser capturada na sessão catch (vc pode ter mais de uma). Vc captura uma exception pelo seguinte motivo: ela é algo ‘inesperado’, que vc precisa tratar, como um erro de conexão. No seu caso vc simplesmente ignora a SQLException que o Conection.getConnection() está lançando.

Agora, perceba que o construtor da sua classe pode lançar uma SQLException.

public UsuarioDAO() throws SQLException

Ou seja, quem vai criar uma instância de UsuarioDAO Ja sabe que pode vir um erro dos brabos ai e deve tratar de acordo. vc não precisa colocar um bloco try/catch dentro desse construtor em especial, pois o design da coisa é assim: se acontecer algum problema, manda pra cima.

Faria sentido se vc quisesse tomar alguma atitude no construtor, por exemplo, mas geralmente não se sobrecarrega um construtor assim.

F

blz saquei legal, então eu faço os tratamentos de erros ali e como é um classe que ja joga o erro não precisa tratar novamente.
Então tirei o try/catch, mas agora outro erro me aparece, que acredito tenha a ver com o driver, mas nao sei o que é.
Segue ele.

java.sql.SQLException: com.mysql.jdbc.Driver at model.Conection.getConnection(Conection.java:18) at DAO.UsuarioDAO.<init>(UsuarioDAO.java:13) at control.Control.doGet(Control.java:41) at javax.servlet.http.HttpServlet.service(HttpServlet.java:690) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870) at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665) at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528) at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685) at java.lang.Thread.run(Thread.java:595)

Marky.Vasconcelos

com isso

java.sql.SQLException: com.mysql.jdbc.Driver   
    at model.Conection.getConnection(Conection.java:18)

Você sabe que o erro está na hora de abri uma conexão.
Você ta com o Jar do Driver no Classpath?

F

Mark_Ameba:
com isso
Você sabe que o erro está na hora de abri uma conexão.
Você ta com o Jar do Driver no Classpath?

Sim estou adicionei ele no propriedades do projeto, external jar.
ta la, to usando o connector J/connector 5.1

peczenyj

Amigo, uma forma seria a seguinte:

try{ this.Connection = Conection.getConnection(); } catch (SQLException e) { System.out.println("Erro na conexao com banco: " + e.getMessage()); throw new SQLException(e); }

Fica olhando o log

F

peczenyj:
Amigo, uma forma seria a seguinte:

try{ this.Connection = Conection.getConnection(); } catch (SQLException e) { System.out.println("Erro na conexao com banco: " + e.getMessage()); throw new SQLException(e); }

Fica olhando o log


Aparece o seguinte alem do erro que eu coloquei antes no fim aparece:

Erro do banco: null
Criado 22 de outubro de 2007
Ultima resposta 22 de out. de 2007
Respostas 12
Participantes 5