Preenchendo JTable e campus vindo com valor " 0 "

9 respostas
A

Bom dia galera, criei uma JTable e criei um método pra preencher-la, mas minha dúvida é o por o campo Idusuario esta vindo com o valor zero, sendo que no meu banco de dados ele nao está com o valor zero... esta com outro valor, por que eles está vindo com o valor zero??

Vo postar o código para vocês analisarem..
public void preencherJtable() throws SQLException{

        tabela.getColumnModel().getColumn(0).setPreferredWidth(10);
        tabela.getColumnModel().getColumn(1).setPreferredWidth(20);
        tabela.getColumnModel().getColumn(2).setPreferredWidth(3);
        tabela.getColumnModel().getColumn(3).setPreferredWidth(20);

        DefaultTableModel modelo = (DefaultTableModel)tabela.getModel();
        modelo.setRowCount(0);

        ContatoNegocio cont = new ContatoNegocio();
        List<Contato> lista = cont.listarContato();
        for(Contato contato : lista){
            modelo.addRow(new Object[]{contato.getIdusuario(),contato.getNome(),contato.getIdade(),contato.getTelefone()});

        }
    }
Vlw Galerinha..... :D

9 Respostas

ViniGodoy

Oi, conforme já te expliquei no outro tópico não use o DefaultTableModel. Ele é mais difícil, mais inseguro, e ocupa no mínimo o dobro do espaço em memória.

No lugar, faça seu próprio TableModel, filho de AbstractTableModel. Aqui está um link que explica como:
http://www.guj.com.br/posts/list/132698.java#714736

Você pode colocar aqui o código que você fez para montar a List<Contato>? Também seria útil você postar a sua classe Contato.

A

Existe alguma solução para essa minha dúvida utilizando esse código ai???

A
ViniGodoy:
Oi, conforme já te expliquei no outro tópico não use o DefaultTableModel. Ele é mais difícil, mais inseguro, e ocupa no mínimo o dobro do espaço em memória.

No lugar, faça seu próprio TableModel, filho de AbstractTableModel. Aqui está um link que explica como:
http://www.guj.com.br/posts/list/132698.java#714736

Você pode colocar aqui o código que você fez para montar a List<Contato>? Também seria útil você postar a sua classe Contato.

Certo vo postar as classes, mas essa
List&lt;Contato&gt;
é apenas a criação de uma variável do tipo lista de contatos, mais nada!!! CLASSE CONTATO.:
package Negocio;

public class Contato {

	private int idusuario;
	private String nome;
	private String idade;
	private String telefone;

	//Contrutor utilizado para Update e delete
	public Contato( int idusuario){

	  this.idusuario = idusuario;
	}

	// Contrutor padrão
	public Contato(String nome , String idade , String telefone){

		this.nome = nome;
		this.idade = idade;
		this.telefone = telefone;
	}

	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getIdade() {
		return idade;
	}
	public void setIdade(String idade) {
		this.idade = idade;
	}
	public String getTelefone() {
		return telefone;
	}
	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}

	public int getIdusuario() {
		return idusuario;
	}

	public void setIdusuario(int idusuario) {
		this.idusuario = idusuario;
	}




}
CLASSE CONTATONEGOCIO.:
package Negocio;
import java.sql.SQLException;
import java.util.List;
import Banco.contatoDAO;


public class ContatoNegocio {

	public void cadastrarContato(String nome , String idade , String telefone) throws SQLException{

		Contato cont = new Contato(nome,idade,telefone);
		contatoDAO cDAO = new contatoDAO();
		cDAO.inserir(cont);
	}

	public void deletarContato(int idusuario) throws SQLException{

		Contato cont = new Contato(idusuario);
		contatoDAO cDAO = new contatoDAO();
		cDAO.deletar(cont);
	}

	public void alterarContato(int idusuario,String nome,String idade,String telefone) throws SQLException{

		Contato cont = new Contato(nome,idade,telefone);
		cont.setIdusuario(idusuario);
		contatoDAO cDAO = new contatoDAO();
		cDAO.altera(cont);
	}

	public List&lt;Contato&gt; listarContato() throws SQLException{

		contatoDAO cDAO = new contatoDAO();
	        return cDAO.listar();
	}

	public List&lt;Contato&gt; buscarContato(int idusuario) throws SQLException{

              contatoDAO dao = new contatoDAO();
              List&lt;Contato&gt; lista = dao.buscar(idusuario);
              return lista;

        }

}
ViniGodoy

Posta o método listar do ContatoDAO.

Não, se o seu problema é o idUsuario ser sempre 0, provavelmente é um problema na carga do contato no banco. Por isso não adianta nada postar a dúvida sem mostrar como você a realiza.

Agora, acho engraçado que você tem a preocupação de criar um DAO, mas insiste em querer usar o DefaultTableModel… pq tentar melhorar o código num lugar, e deixar gambi em outro?

A
Pois é, vo postar contataDAO de listar aqui, ai vc olha...
package Banco;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import Negocio.Contato;

public class contatoDAO {

	
	public void inserir(Contato contato) throws SQLException{
		
		// Abrir uma conexao
		Connection conn = Conexao.getConexao();
		
		// Variável utilizada para armazenar os comandos SQL
		String sql = "insert into usuario(nome,idade,telefone)" + "values(?,?,?)";
		//Cria o Statement para executar o código SQL
		PreparedStatement stmt = conn.prepareStatement(sql);
		
		// Setar os valores no statemant
		stmt.setString(1, contato.getNome());
		stmt.setString(2, contato.getIdade());
		stmt.setString(3, contato.getTelefone());
		
		// Executa o código SQL com os valores setados
		stmt.execute();
		stmt.close();
	}
	
	public List<Contato> listar() throws SQLException{
		
        Connection conn = Conexao.getConexao();
		
		String sql = "Select * from usuario";
		PreparedStatement stmt = conn.prepareStatement(sql);
		
		// Esse método é utilizado para apontar para os dados do BD
		ResultSet rs = stmt.executeQuery();
		
		//Cria uma lsita para armazenar os valores que serão buscados
		 List<Contato> minhaLista = new ArrayList<Contato>();
		
		while(rs.next()){
			// Essa Rotína pega os dados do banco e armazena nesse objeto do tipo contato
			Contato contato = new Contato(rs.getString("nome"),rs.getString("idade"),rs.getString("telefone"));
			
			//Essa rotína adiciona os dados de contato no objeto minhaLista
			minhaLista.add(contato);
			
		 }
		 rs.close();
		 stmt.close();
		 return minhaLista;
      }
	
	public void altera(Contato contato) throws SQLException{
		
		Connection conn = Conexao.getConexao();
		String sql = " Update usuario set nome = ? ,idade = ? ,telefone = ? where idusuario = ? ";
		PreparedStatement stmt = conn.prepareStatement(sql);
		
		// Setar os valores no statemant
		stmt.setString(1, contato.getNome());
		stmt.setString(2, contato.getIdade());
		stmt.setString(3, contato.getTelefone());
		stmt.setInt(4,contato.getIdusuario());
		
		// Executa o código SQL com os valores setados
		stmt.execute();
		stmt.close();
		
	}
	
	public void deletar(Contato contato) throws SQLException{
		
		Connection conn = Conexao.getConexao();
		String sql= "Delete From usuario where idusuario=?";
		PreparedStatement stmt = conn.prepareStatement(sql);
		
		stmt.setInt(1, contato.getIdusuario());
		stmt.execute();
		stmt.close();
		
		}
	public List<Contato> buscar(int idusuario) throws SQLException{
		
        Connection conn = Conexao.getConexao();
        
        // Nesta Rotína, nescessita de utilizar o contrutor
        // para inicializa-lo com o parametro de deseja consultar
		Contato contato = new Contato(idusuario);
		
		
		String sql = "Select * from usuario where idusuario=?";
		PreparedStatement stmt = conn.prepareStatement(sql);
		stmt.setInt(1, contato.getIdusuario());
		ResultSet rs = stmt.executeQuery();

		 List<Contato> listar= new ArrayList<Contato>();
		
		while(rs.next()){
			
			Contato cont = new Contato(rs.getString("nome"),rs.getString("idade"),rs.getString("telefone"));
			listar.add(cont);
			
		 }
		 rs.close();
		 stmt.close();
		 return listar;
      }
	
	
}
ViniGodoy

Cara, olha ali o seu método listar.

Ali você não está setando o id do usuário na classe contato.

Mude seu while para:

while(rs.next()){  
             // Essa Rotína pega os dados do banco e armazena nesse objeto do tipo contato  
             Contato contato = new Contato(rs.getInteger("idContato"));
             contato.setNome(rs.getString("nome"));
             contato.setIdade(rs.getString("idade"));
             contato.setTelefone(rs.getString("telefone"));  
               
             //Essa rotína adiciona os dados de contato no objeto minhaLista  
             minhaLista.add(contato);  
               
          }
A

mano, nao sei se vc viu, ams eu tenho dois metodos construtores, 1 só contem como parametro o idusuario
e o outro contem todos os outros… e ai como faço??

ViniGodoy

Anderson S.:
mano, nao sei se vc viu, ams eu tenho dois metodos construtores, 1 só contem como parametro o idusuario
e o outro contem todos os outros… e ai como faço??

Usa o construtor com idUsuario e os métodos set para definir os outros parâmetros, igual ao postei no while do meu post anterior.

A

entendi,qualquer coisa comunico aqui no forum, vo testar aqui,vlw pela ajuda mano

Criado 7 de março de 2010
Ultima resposta 8 de mar. de 2010
Respostas 9
Participantes 2