NullPointerException em PreparedStatement

7 respostas
V

Olá, sou novo no fórum. Estou estudando a parte de jdbc antes de começar algo maior (como frameworks de ORM, etc.). Consegui me conectar e adicionar um registro no banco de dados (MYSQL 5.0.37), usando o JDK 1.5 Update 6 e o driver mysql connector 5.0.5. O problema é que quando eu tento fazer uma classe DAO, na hora de adicionar, ocorre uma NullPointerException. Só que o código pra adicionar É O MESMO que eu usava antes, pra conectar e adicionar, usando uma classe só! Vou colocar os códigos do “antes e depois”, pra se alguém puder, me corrija ou ajude:

ANTES

import java.sql.*;

public class TesteBD {

	public static void main (String args[]) {
		try {
			Connection conexao = ConnectionFactory.getConnection();

			Contato c = new Contato();
			c.setNome("Fulano");
			c.setEndereco("Rua da casa dele");
			c.setIdade(19);
			c.setTelefone("[telefone removido]");
			c.setEmail("[email removido]");
			System.out.println("Contato criado");

			PreparedStatement stmt = conexao.prepareStatement("insert into contato (nome,endereco,idade,telefone,email) values (?,?,?,?,?);");

			stmt.setString(1,c.getNome());
			stmt.setString(2,c.getEndereco());
			stmt.setInt(3,c.getIdade());
			stmt.setString(4,c.getTelefone());
			stmt.setString(5,c.getEmail());

			stmt.executeUpdate();
			stmt.close();

			System.out.println("Contato adicionado");

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

}

7 Respostas

V

DEPOIS

import java.sql.*;

public class TestaDAO {

	public static void main (String args[]) {
		try {
			Connection conexao = ConnectionFactory.getConnection();

			Contato c = new Contato();
			c.setNome("Fulano");
			c.setEndereco("Rua da casa dele");
			c.setIdade(19);
			c.setTelefone("[telefone removido]");
			c.setEmail("[email removido]");
			System.out.println("Contato criado");

			ContatoDAO dao = new ContatoDAO();
			dao.adiciona(c);

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

}
V

Classe ContatoDAO

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.PreparedStatement;

public class ContatoDAO {

	private Connection conexao;
	private PreparedStatement stmt;

	public void ContatoDAO() throws SQLException {
		this.conexao = ConnectionFactory.getConnection();
	}

	public void adiciona(Contato contato) throws Exception {
		stmt = this.conexao.prepareStatement("insert into contato (nome,endereco,idade,telefone,email) values (?,?,?,?,?);");

		stmt.setString(1,contato.getNome());
		stmt.setString(2,contato.getEndereco());
		stmt.setInt(3,contato.getIdade());
		stmt.setString(4,contato.getTelefone());
		stmt.setString(5,contato.getEmail());

		stmt.executeUpdate();
		stmt.close();
	}
}

ConnectionFactory

import java.sql.DriverManager;
 import java.sql.Connection;
 import java.sql.SQLException;
 
 public class ConnectionFactory {
 
 	private static final String driver = "com.mysql.jdbc.Driver";
 	private static final String url = "jdbc:mysql://localhost:3306/agenda";
 	private static final String user = "root";
 	private static final String pass = "";
 
 	public static Connection getConnection() throws SQLException {
 		try {
 			Class.forName(driver);
 			return DriverManager.getConnection(url,user,pass);
 		}
 		catch (ClassNotFoundException e) {
 			throw new SQLException("O driver jdbc não foi encontrado");
 		}
 
 	}
 
 }
V

Obrigado pela ajuda.

Mauricio_Linhares

Qual é a linha e a classe da NullPointerException?

V

Em TestaDAO:

dao.adiciona©;

Em ContatoDAO:

stmt = this.conexao.prepareStatement(“insert into contato (nome,endereco,idade,telefone,email) values (?,?,?,?,?);”);

joe_cqr

a sua classe ContatoDAO não está criando a conexão, pq o construtor está declarado como um método void, e isto não está deixando vc criar uma instancia da conexão, ai ela fica como null e gera a exceção NullPointerException

public void ContatoDAO() throws SQLException {
 		this.conexao = ConnectionFactory.getConnection();
 	}

deve estar assim

public ContatoDAO() throws SQLException {
 		this.conexao = ConnectionFactory.getConnection();
 	}
V

Caramba!!! Eu fiquei dias revendo o código! Esqueci que o void não deixa retornar nada!

O interessante é que quando eu testo pra ver se a conexão é !=null (fiz isso após postar aqui), ele retorna false, então não sei o que está na variável conexao (deve ser uma conexao vazia, sei lá).

De qualquer forma, muito obrigado!

Criado 28 de abril de 2007
Ultima resposta 29 de abr. de 2007
Respostas 7
Participantes 3