Problema Inserir Contatos (fj-21)

13 respostas
L

Boa Tarde, estou usando a apostila fj-21 para aprender sobre a programação web, mas estou usando o banco de dados oracle 11g Express.

Meu problema e que, a conexão com o oracle funciona perfeitamente, criei as classes para conexao e para adicionar contatos na tabela, mas quando testo a classe que adiciona os contatos aparece o maldito erro:

Exception in thread "main" java.lang.NullPointerException
at br.com.wacontactcenter.jdbc.dao.ContatoDAO.adiciona(ContatoDAO.java:25)
at br.com.wacontactcenter.jdbc.teste.TestaInsere.main(TestaInsere.java:19)

A minha classe ContatoDAO e TestaInsere esta igualzinho a da apostila, e como a conexão com o oracle esta funcionando corretamente, não sei o que possa estar acontecendo, se alguem puder me ajudar agradeceria muito.

package br.com.wacontactcenter.jdbc.dao;

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

import br.com.wacontactcenter.jdbc.modelo.Contato;
import Conexao.connection;

public class ContatoDAO {

	private Connection connection;

	public void contatoDAO() {
		this.connection = new connection().getConexao();
	}
	
	 public void adiciona(Contato contato) {
	     String sql = "insert into contatos " +
	             "(nome,departamento,senha)" +
	             " values (?,?,?)";
	 
	     try {
	         // prepared statement para inserção
	         PreparedStatement stmt = connection.prepareStatement(sql);
	 
	         // seta os valores
	         stmt.setString(1,contato.getNome());
	         stmt.setString(2,contato.getDepartamento());
	         stmt.setInt(3,contato.getSenha());
	         
	         // executa
	         stmt.execute();
	         stmt.close();
	     } catch (SQLException e) {
	         throw new RuntimeException(e);
	     }
	 }
}
package br.com.wacontactcenter.jdbc.teste;
import br.com.wacontactcenter.jdbc.dao.ContatoDAO;
import br.com.wacontactcenter.jdbc.modelo.Contato;

public class TestaInsere {

	public static void main(String[] args) {

		Contato contato = new Contato();

		contato.setNome("Fellipe");
		contato.setDepartamento("TI-Desenvolvimento");
		contato.setSenha(181);

		// grave nessa conexão!!!
		ContatoDAO dao = new ContatoDAO();

		// método elegante
		dao.adiciona(contato);

		System.out.println("Gravado!");
	}

}
package br.com.wacontactcenter.jdbc.modelo;

public class Contato {
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getDepartamento() {
		return departamento;
	}
	public void setDepartamento(String departamento) {
		this.departamento = departamento;
	}
	public int getSenha() {
		return senha;
	}
	public void setSenha(int senha) {
		this.senha = senha;
	}
	private Long id;
	private String nome;
	private String departamento;
	private int senha;
	

}

Eu to usando o jdk7 e na hora que usei o SQLDevelopment da oracle disse q o programa poderia nao funcionar corretamente, mas como a conexão funcionou corretamente eu não sei se tem algo haver, e o nome da minha conexão do oracle se chama " Intranet ", passei essas informações pois não sei o que pode estar acontecendo.

Obs: Desculpem os erros de português.

13 Respostas

K

Cara uma sugestão muito boa, e que facilitaria muito para vc.
Use um framework de persistência, tipo hibernate.
muito mais fácil.

L

Entendo, começei o curso da caelum mas ainda não estou na parte da web, fiz dessa maneira pra poder entender os códigos, e tambem ainda não sei nada de hibernate, mas eu vo usa-lo sim, vlw pela dica

marcelo.silva.java

que erro que deu???

[]s,

rogeriopaguilar

O que está errado é o construtor. Ao invés de:

public void contatoDAO() {

a declaração deve ser:

public ContatoDAO() {

L

Quando executo a classe " TestaInsere", acontece o seguinte erro:

Exception in thread “main” java.lang.NullPointerException

at br.com.wacontactcenter.jdbc.dao.ContatoDAO.adiciona(ContatoDAO.java:25)

at br.com.wacontactcenter.jdbc.teste.TestaInsere.main(TestaInsere.java:19)
marcelo.silva.java

vc fez oque nosso amigo indicou??

seu construtor está errado…só use public ContatoDAO(){…}

L

Fiz o que vcs disseram e deu certo, agora o erro acontece pois tem 1 campo chamado ID no banco que esta Nulo, mas como é chave primária ele não pode ficar null e eu nao coloquei ele pra ser auto incrementavel, agora tenho que saber como faço isso rssrsrrs

Muito obrigado pela ajuda gente!!

K

mas não precisa ser somente para web.

marcelo.silva.java

ou…vamos lá

está errado seu construtor…

construtor tem que ser do mesmo jeito que vc escreve sua classe… ou seja… public ContatoDao(){…) em maiusculo…

L

Fiz o que vcs disseram e deu certo, agora o erro acontece pois tem 1 campo chamado ID no banco que esta Nulo, mas como é chave primária ele não pode ficar null e eu nao coloquei ele pra ser auto incrementavel, agora tenho que saber como faço isso rssrsrrs

Muito obrigado pela ajuda gente!!

marcelo.silva.java

vai no banco e da um update na tabela…colocando a coluna id como auto imcremento

falow

L

sim sim, vo fazer isso, e que como começei agora a usar o oracle, ainda to aprendendo a fazer essas coisas rsrsrs!!

fredericomaia10

Exato o problema era o construtor.

Quanto ao auto-incremento o Oracle não possui. Você vai precisar utilizar uma Sequence.

Este tópico pode te ajudar. http://www.guj.com.br/java/66010-resolvido-como-fazer-o-oracle-entender-que-eu-quero-utilizar-uma-sequence

Criado 8 de janeiro de 2013
Ultima resposta 8 de jan. de 2013
Respostas 13
Participantes 5