Retorna como null

14 respostas
R

Neste código consigo alimentar setNome, setEmail, setEndereco, mas não consigo alimentar setId, retorna como null, o que posso deixar de estar fazendo?

public List<Contato> getLista() throws SQLException {
		
		PreparedStatement stmt = this.connection.prepareStatement("select * from contatos order by nome");
		ResultSet rs = stmt.executeQuery();
		
		List<Contato> contatos = new ArrayList<Contato>();
		
		while(rs.next()) {
			// criando o objeto Contato
			Contato contato = new Contato();
			contato.setId(rs.getLong("id"));
			contato.setNome(rs.getString("nome"));
			contato.setEmail(rs.getString("email"));
			contato.setEndereco(rs.getString("endereco"));
			
			// adicionando o objeto à lista
			contatos.add(contato);
		}
		
		rs.close();
		stmt.close();
		
		return contatos;
		
	}

Obrigado

Rodney Peixoto

14 Respostas

XpLoDeR

Olá Rodney3400

Olhando assim creio que não há nada errado não!

Pode ser que NULL seja mesmo o retorno do banco de dados.

Verifique se o campo Id não está NULL no BD.

Abraços!

R

Olá XpLoDeR

O Campo id no banco de dados é autoincremento e não esta null, verifiquei isso.

Estou buscando em alguns livros aqui mas nada de achar algo que não me satisfaça nisso.

Mais alguma proposta a se fazer?

Obrigado

Rodney Peixoto

gabrielmassote

Tudo bem rodney3400?

Vendo o tópico seu e os comentário do meu caro amigo Gustavo, penso que a única coisa a mais ai é você verificar se o campo que esta setado como id no banco é mesmo long, com isso verifique também se o tipo do id na sua classe e do banco são do mesmo tipo.

Qualquer coisa estamos a disposição.

Abraços.

R

O campo no mysql é BigInt

Rodney Peixoto

gabrielmassote

Nunca vi como recuperar este tipo…

ja tentou pegar como int??

XpLoDeR

rodney3400:
O campo no mysql é BigInt

Rodney Peixoto

Olá Rodney,

Creio que esteja mesmo havendo uma incompatibilidade de tipos aí como o meu amigo Gabriel Massote disse.

Abraços!

R

O que precisam para que eu possa colocar aqui pra ver esta incompatibilidade?

Obrigado

Rodney Peixoto

XpLoDeR

rodney3400:
O que precisam para que eu possa colocar aqui pra ver esta incompatibilidade?

Obrigado

Rodney Peixoto

Não sei se dará certo, mas tente usar a função “rs.getBigDecimal”.

Abraços!

wswillianss

Olá,
Tente mudar o tipo da variável na sua classe de modelo Contato, assim:

private long id;

para

private Long id;

R

Já esta como

private Long id;

Obrigado.

Rodney Peixoto

wswillianss

rodney3400:
Já esta como

private Long id;

Obrigado.

Rodney Peixoto

Olhando seu código dá para ver que está correto. Agora resta saber como estar seu ConnectionFactory.java e seu Contato.java. Ou se sua tabela esta correta…

R

Ola,

Já são 03:00, e estou aqui na frente do pc, desde as 13:00h, e preciso dormir um pouco…rs… então continuarei amanha nesta busca incançável…rs…

Até mais,

Obrigado a todos pela colaboração.

Rodney Peixoto.

wswillianss

… dá uma olhada nesses arquivos e veja se o seu está parecido:

Contato.java

package br.com.caelum.jdbc;

public class Contato {
	private Long id;
	private String nome;
	private String fone;
	private String email;
	
	public 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 getFone() {
		return fone;
	}

	public void setFone(String fone) {
		this.fone = fone;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}
	
	
}

ConnectionFactory.java

package br.com.caelum.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ConnectionFactory {
	public static Connection getConnection()throws SQLException{
		try{
			Class.forName("com.mysql.jdbc.Driver");
			return DriverManager.getConnection("jdbc:mysql://localhost/test","root","");
		}catch(ClassNotFoundException e){
			throw new SQLException(e.getMessage());
		}
	}
}

ContatoDAO.java

package br.com.caelum.jdbc;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class ContatoDAO {
	private Connection connection;

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

	public List<Contato> pesquisa(Contato contato) throws SQLException {
		PreparedStatement stmt = this.connection
				.prepareStatement("select * from contatos where id=?");
		stmt.setLong(1, contato.getId());
		ResultSet rs = stmt.executeQuery();
		List<Contato> lista = new ArrayList<Contato>();
		while (rs.next()) {
			Contato c = new Contato();
			c.setId(rs.getLong("id"));
			c.setNome(rs.getString("nome"));
			c.setFone(rs.getString("fone"));
			c.setEmail(rs.getString("email"));
			lista.add(c);
		}
		rs.close();
		stmt.close();
		this.connection.close();
		return lista;
	}

	public void altera(Contato contato) throws SQLException {
		PreparedStatement stmt = this.connection
				.prepareStatement("update contatos set "
						+ "nome=?,fone=?,email=? where id=?");
		stmt.setString(1, contato.getNome());
		stmt.setString(2, contato.getFone());
		stmt.setString(3, contato.getEmail());
		stmt.setLong(4, contato.getId());
		stmt.execute();
		stmt.close();
		this.connection.close();
	}

	public void remove(Contato contato) throws SQLException {
		PreparedStatement stmt = this.connection
				.prepareStatement("delete from contatos where id=?");
		stmt.setLong(1, contato.getId());
		stmt.execute();
		stmt.close();
		this.connection.close();
	}

	public void adiciona(Contato contato) throws SQLException {
		PreparedStatement stmt = this.connection
				.prepareStatement("insert into contatos(nome,fone,email)"
						+ "values(?,?,?)");
		stmt.setString(1, contato.getNome());
		stmt.setString(2, contato.getFone());
		stmt.setString(3, contato.getEmail());
		stmt.execute();
		stmt.close();
		this.connection.close();
	}

	public List<Contato> getLista() throws SQLException {
		PreparedStatement stmt = this.connection
				.prepareStatement("select * from contatos order by id DESC");
		ResultSet rs = stmt.executeQuery();
		List<Contato> lista = new ArrayList<Contato>();
		while (rs.next()) {
			Contato c = new Contato();
			c.setId(rs.getLong("id"));
			c.setNome(rs.getString("nome"));
			c.setFone(rs.getString("fone"));
			c.setEmail(rs.getString("email"));
			lista.add(c);
		}
		rs.close();
		stmt.close();
		this.connection.close();
		return lista;
	}
}

Qualquer coisa posta de novo.
Abraço!

XpLoDeR

Olá Rodney,

criei uma tabela no mysql aqui (id : BIGINT e nome : VARCHAR) e uma classe para testar.

Funcionou perfeitamente, tanto com getLong quanto com getBigDecimal.

A classe ficou da seguinte forma:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

/**
 *
 * @author Gustavo Oliveira
 * @since 25-10-2008
 */
public class Main {

    public static void main(String[] args) {
        try {
            Connection connection = null;
            try {
                Class.forName("com.mysql.jdbc.Driver").newInstance();
                connection = DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "vertrigo");
            } catch (Exception e) {
                JOptionPane.showMessageDialog(null, e.getMessage(), "Erro no SQL", JOptionPane.ERROR_MESSAGE);
                e.printStackTrace();
                System.exit(0);
            }

            PreparedStatement stmt = connection.prepareStatement("Select * from teste");
            ResultSet rs = stmt.executeQuery();
            while (rs.next()) {
                System.out.println("BigDecimal - ID: " + rs.getBigDecimal("id") + " - Nome: " + rs.getString("nome"));
		System.out.println("Long - ID: " + rs.getLong("id") + " - Nome: " + rs.getString("nome"));
            }
        } catch (SQLException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

}

Ok?

Abraços!

Criado 24 de outubro de 2008
Ultima resposta 25 de out. de 2008
Respostas 14
Participantes 4