[RESOLVIDO] Problemas com cadastro feito em tempo de execução...( TableModel )

38 respostas
A
E ai galerinha... to com uma probleminha aqui é o seguinte.: Sempre que cadastro um novo contato ele aparece na JTable em tempo de execução perfeitamente, todos os dados aparecem perfeitamente, mas o ID referente a esse novo contato sempre vem com o valor "0", ai quando fecho e abro a aplicação o ID referente ao novo contato aparece....será por que que ele só aparece qundo fecho e abro novamente a aplicação??? Por que ele nao aparece com o valor correto como os outros dados?????? Vo postar os códigos referentes a parte de cadastro!!! Obrigado!!! :) INSERIR DO DAO
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();
	}
REGRA DE NEGOCIO
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);
	}
BOTAO CADASTRAR
private void bt_cadastrarActionPerformed(java.awt.event.ActionEvent evt) {                                             

        if((evt.getSource() == bt_cadastrar) && (verificarDados())){
            ContatoNegocio cont = new ContatoNegocio();
            ContatoTableModel modelo = (ContatoTableModel)tabela.getModel();
            
            // Contato Criado para utilizar no tablemodel, para que ele
            // possa indentificar o novo contato
            Contato contato = new Contato(tf_nome.getText() , tf_idade.getText() , tf_telefone.getText());
            try {
                
                cont.cadastrarContato(contato.getNome(),contato.getIdade(),contato.getTelefone());
                modelo.add(contato);
                
            } catch (SQLException ex) {
                Logger.getLogger(ContatoFrame.class.getName()).log(Level.SEVERE, null, ex);
            }
            JOptionPane.showMessageDialog(null,"Cadastrado Com Sucesso!!!");
            limparCampos();
                
            
        }
    }

38 Respostas

Marky.Vasconcelos

Cara… é exatamente o motivo que eu falei da outra vez.

Depois de incluir no banco voce precisa pesquisar no banco qual é o id que o Contato foi inserido.

Depois setar o valor no Contato para que ele tenha seu valor atualizado.

A

Certo…Mas como sou iniciante,não sei como faz isso na prática,isso que ta me atrapalhando a resolver o problema!!! :frowning:

discorpio

Boa noite.

Simples, após inserir o contato, voce tem que pesquisar com um “Select” qual foi o contato que foi inserido, portando logo após executar um insert, chame uma pesquisa informando o nome do contato inserido.

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);
        cDAO.pesquisar(cont);  // Aqui voce faz a pesquisa logo após o inserir.
}

Isto é, presumindo que o seu contatoDAO tenha um método pesquisar, passando como parâmetros o Contato.

A
Opa, blz cara..olha só..eu fiz um pouco diferente, mas utilizando sua lógica. criei um outro método dentro do DAo que pesquisava pelo nome inserido, e chamei dentro do metodo inserir do DAO, mas continua vindo com valor igual a zero...vo postar pra voc~e olhar os dois métodos!! Obrigado!!!
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();
                String nome = contato.getNome();
                int x =  pesquisarID(nome); // CHAMADA DO MÉTODO
                contato.setIdusuario(x);
                stmt.close();


	}

        // ESSE MÉTODO IRÁ SER CHAMADO DENTRO DO MÉTODO INSERIR
        private int pesquisarID(String nome) throws SQLException{

            Connection conn = Conexao.getConexao();
            int x = 0;
            Contato contato = new Contato(nome);

            String sql = "Select idusuario from usuario where nome=?";
            PreparedStatement stmt = conn.prepareStatement(sql);
            stmt.setString(1,contato.getNome());
            ResultSet rs = stmt.executeQuery();

            if(rs.next() == true){
                contato.setIdusuario(rs.getInt("idusuario"));

                 x = contato.getIdusuario();
            }
            return x;
        }
Mesmo assim quando Cadastro, o Id continua vindo com o valor Zero :oops:
A

E ai galera alguma solução???

Marky.Vasconcelos

Agora que voce fez algo eu te ajudo.

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();
                String nome = contato.getNome();
                int x =  pesquisarID(nome); // CHAMADA DO MÉTODO
                contato.setIdusuario(x);
                stmt.close();


	}

        // ESSE MÉTODO IRÁ SER CHAMADO DENTRO DO MÉTODO INSERIR
        private int pesquisarID(String nome) throws SQLException{

            Connection conn = Conexao.getConexao();
            String sql = "Select idusuario from usuario where nome=?";
            PreparedStatement stmt = conn.prepareStatement(sql);
            stmt.setString(1,nome);
            ResultSet rs = stmt.executeQuery();

            if(rs.next() == true)
                return rs.getInt("idusuario");
            else
               return -1;
        }

Verifique agora se ele retorna -1 ou 0.
Se for -1 voce deve usar um where melhor para retornar o valor certo.
Tente também colocar essa query no prompt do seu banco para ver se funciona.

lina

Oi,

Na tabela USUARIO existe uma coluna exatamente com o nome idusuario ?
Depois do insert você deu commit ?

// ESSE MÉTODO IRÁ SER CHAMADO DENTRO DO MÉTODO INSERIR
        private int pesquisarID(String nome) throws SQLException{

            Connection conn = Conexao.getConexao();
            String sql = "Select idusuario from usuario where nome=?";
            PreparedStatement stmt = conn.prepareStatement(sql);            
            ResultSet rs = stmt.executeQuery();

            return (rs.next() ? rs.getInt("idusuario") : -1);
        }

Tchauzin!

A

Ai Mark_Ameba, testei seu exemplo na aplicação e o idusuario continua vindo para a JTable com o valor Zero “0”… o exemplo da lina tbm nao deu certo!!!
será que não é na TableModel não??? :frowning:
eu chamei o método pesquisar numa classe teste que apresentava valores em linha de texto, e retorno o idusuario certinha quando existia o nome dele no Banco, mas na JTable continua vindo com o valor zero :cry:

A

lina:
Oi,

Na tabela USUARIO existe uma coluna exatamente com o nome idusuario ?
Depois do insert você deu commit ?

// ESSE MÉTODO IRÁ SER CHAMADO DENTRO DO MÉTODO INSERIR
        private int pesquisarID(String nome) throws SQLException{

            Connection conn = Conexao.getConexao();
            String sql = "Select idusuario from usuario where nome=?";
            PreparedStatement stmt = conn.prepareStatement(sql);            
            ResultSet rs = stmt.executeQuery();

            return (rs.next() ? rs.getInt("idusuario") : -1);
        }

Tchauzin!


Oi lina, eu nao conheço esse comando Commit, por isso nao usei :smiley:

lina

Oi,

No seu caso… depois de executar o insert na base de dados, utilize:

Connection conn = Conexao.getConexao(); conn.commit();

Isso irá gravar as alterações na base…

Tchauzin!

Marky.Vasconcelos

Para JDBC nao precisa do commit.

Mas está com 0? incrivel deveria pelo menos estar com -1.

Coloca seu código onde voce faz a consulta para todos os objetos.

A
Eu não entendi muito bem qual código você quer por isso vo postar toda a classe DAO.. Obrigado!
package Banco;

import Apresentacao.ContatoTableModel;
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();
                String nome = contato.getNome();
                int x =  pesquisarID(nome);
                contato.setIdusuario(x);
                stmt.close();


	}

        private int pesquisarID(String nome) throws SQLException{

            Connection conn = Conexao.getConexao();
            int x = 0;
            //Contato contato = new Contato(nome);

            String sql = "Select idusuario from usuario where nome=?";
            PreparedStatement stmt = conn.prepareStatement(sql);
            stmt.setString(1,nome);
            ResultSet rs = stmt.executeQuery();

            if(rs.next() == true){
                return rs.getInt("idusuario");
            }else{
                return -1;
            }
            
        }

                
                  
	public List<Contato> listar() throws SQLException{ // MÉTODO UTILIZADO PARA BUSCAR OS DADOS DO BANCO E LISTAR DO JTABLE

        Connection conn = Conexao.getConexao();

		String sql = "Select * from usuario order by nome";
		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.getInt("idusuario"));
                        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);

		 }
		 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(String nome) 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(nome);

                String sql = "Select * from usuario where nome=?";
		PreparedStatement stmt = conn.prepareStatement(sql);
		stmt.setString(1, contato.getNome());
		ResultSet rs = stmt.executeQuery();

		 List<Contato> listar= new ArrayList<Contato>();

		while(rs.next()){


			Contato cont = new Contato(rs.getInt("idusuario"));
                        cont.setNome(rs.getString("nome"));
                        cont.setIdade(rs.getString("idade"));
                        cont.setTelefone(rs.getString("telefone"));
			listar.add(cont);

		 }
		 rs.close();
		 stmt.close();
		 return listar;
      }


}
A

[u]

lina:
Oi,

No seu caso… depois de executar o insert na base de dados, utilize:

Connection conn = Conexao.getConexao(); conn.commit();

Isso irá gravar as alterações na base…

Tchauzin!


O commiit não funcionou

Marky.Vasconcelos

Hm… tente o seguinte.

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();
                 String sql = "Select max(idusuario) as id from usuario";
            PreparedStatement stmt = conn.prepareStatement(sql);
            ResultSet rs = stmt.executeQuery();
            contato.setIdusuario(rs.getInt("id"));
                stmt.close();
	}
A

Testei sua nova solução e o ID continua vindo com o valor zero :frowning:

Marky.Vasconcelos

Po… abre o banco de dados por um cmd e ve os dados então. Impossivel isso.

lina

Oi,

Sugiro que abra pelo sqlplus ou DBedit e faça o insert e select tudo na unha mesmo…

Confira os resultados.

Pode ter certeza de uma coisa, algo de errado não esta certo. :stuck_out_tongue:

Tchauzin!

A

eu ja fiz isso, ja puchei is dados em uma janela de comandos, e tudo certo, mas na JTable sempre vem como valor zero :cry:

A

pois é lina, ja fiz isso…

lina

Oi,

Então o erro não está no insert e nem no select da pesquisa. e Sim quando você está carregando a tabela.

Post o código que você faz para carregar a tabela.

Tchauzin!

Ironlynx

Anderson, posta o seu Model e a classe que o manipula aí.

A

Boa tarde Lina e Ironlynx ............ Vo postar o método que utilizo para listar na JTable e minha TableModel..
qualquer código que vocês quiserem é só falar que posto..
Obrigado pela ajuda!!!!!! :D

MÉTODO QUE PREENCHE A JTABLE
private void preencheTabela() throws SQLException{

        ContatoNegocio cont = new ContatoNegocio();
        List<Contato> lista = cont.listarContato();

        ContatoTableModel modelo = new ContatoTableModel(lista);
       
        tabela.setModel(modelo);
    }
MINHA TABLEMODEL
package Apresentacao;

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

import javax.swing.table.AbstractTableModel;

public class ContatoTableModel extends AbstractTableModel {
    private static final int COL_ID = 0;
    private static final int COL_NOME = 1;
    private static final int COL_IDADE = 2;
    private static final int COL_TELEFONE = 3;

    private List<Contato> Contato;

    // Esse é um construtor, que recebe a nossa lista de Contatos
    public ContatoTableModel(List<Contato> valores) {
        this.Contato = new ArrayList<Contato>(valores);
    }

    public int getRowCount() {
        // Quantas linhas tem sua tabela? Uma para cada item da lista.
        return Contato.size();
    }

    public int getColumnCount() {
        // Quantas colunas tem a tabela? Nesse exemplo, só 3.
        return 4;
    }

    public String getColumnName(int columnIdx) {
        // Qual é o nome das nossas colunas?
         if (columnIdx == COL_ID)
            return "ID";
        if (columnIdx == COL_NOME)
            return "Nome";
        if (columnIdx == COL_IDADE)
            return "Idade";
        if (columnIdx == COL_TELEFONE)
            return "Telefone";
        return ""; // Nunca deve ocorrer
    }

    public Object getValueAt(int row, int column) {
        // Precisamos retornar o valor da coluna column e da linha row.
        Contato con = Contato.get(row);
        if (column == COL_ID)
            return con.getIdusuario();
        if (column == COL_NOME)
            return con.getNome();
        if (column == COL_IDADE)
            return con.getIdade();
        if (column == COL_TELEFONE)
            return con.getTelefone();
        return ""; // Nunca deve ocorrer
    }

    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        // Vamos alterar o valor da coluna columnIndex na linha rowIndex com o
        // valor aValue passado no parâmetro.
        // Note que vc poderia alterar 2 campos ao invés de um só.
        Contato con = Contato.get(rowIndex);
         if (columnIndex == COL_ID)
            con.setIdusuario(aValue.toString().indexOf(COL_ID));
        if (columnIndex == COL_NOME)
            con.setNome(aValue.toString());
        if (columnIndex == COL_IDADE)
            con.setIdade(aValue.toString());
        if (columnIndex == COL_TELEFONE)
            con.setTelefone(aValue.toString());
    }

    public Class<?> getColumnClass(int columnIndex) {
        // Qual a classe das nossas colunas? Como estamos exibindo texto, é
        // string.
        return String.class;
    }

    public boolean isCellEditable(int rowIndex, int columnIndex) {
        // Indicamos se a célula da rowIndex e da columnIndex é editável. Nossa
        // tabela toda é.
        return true;
    }
    public void delete(int row){
        Contato.remove(row);
        fireTableRowsDeleted(row,row);

    }
    public void add(Contato c){
        Contato.add(c);//adiciona o novo contato no modelo
        fireTableDataChanged();
    }

   

    // Já que esse tableModel é de contatos, vamos fazer um get que retorne um
    // contato inteiro.
    // Isso elimina a necessidade de chamar o getValueAt() nas telas.
    public Contato get(int row) {
        return Contato.get(row);
    }
}
Marky.Vasconcelos

Posta o código de

ContatoNegocio.listarContato();

Erro sinistro esse seu ein.

A
Mark_Ameba:
Posta o código de

ContatoNegocio.listarContato();

Erro sinistro esse seu ein.
Pois, é eu também to achando.... :mrgreen: TA AI O MÉTODO
public List<Contato> listarContato() throws SQLException{

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

Ta entao posta contatoDAO.listar()

A

Ta ai...

ContatoDAO.Listar()
public List<Contato> listar() throws SQLException{ // MÉTODO UTILIZADO PARA BUSCAR OS DADOS DO BANCO E LISTAR DO JTABLE   
  
        Connection conn = Conexao.getConexao();   
  
        String sql = "Select * from usuario order by nome";   
        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.getInt("idusuario"));   
                        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);   
  
         }   
         rs.close();   
         stmt.close();   
         return minhaLista;   
      }
A

Ta bem Sinistro esse problema viu!!! :?

lina

Oi,

Acho que o erro está aqui.:

public List<Contato> listar() throws SQLException{ // MÉTODO UTILIZADO PARA BUSCAR OS DADOS DO BANCO E LISTAR DO JTABLE   
  
        while(rs.next()) {   
           
            Contato contato = new Contato(rs.getInt("idusuario"));   // ESSA LINHA.... IDUSUARIO deveria ter um setId(); ?!?!?! Ao menos que você faça isso no contrutor de Contato()
                        contato.setNome(rs.getString("nome"));   
                        contato.setIdade(rs.getString("idade"));   
                        contato.setTelefone(rs.getString("telefone"));   
           
            minhaLista.add(contato);   
}

por questão de agilidade, quando fizer um.:

String sql = "Select * from usuario order by nome";

Especifique somente como retorno as colunas que gostaria de trazer do banco, ou seja:

String sql = "Select idusuario, nome, idade, telefone from usuario order by nome";

Tchauzin!

A

Lina nesta linha aqui Contato contato = new Contato(rs.getInt("idusuario")Eu tenho um construtuor na classe contato que recebe o idusuario como parametro, por isso coloquei assim!!!
Mesmo assim Obrigado!!

Marky.Vasconcelos

Cara vai no seu banco e coloca a SQL que voce quer que obtenha só o id e ve se funciona.

PS: Foto meiga lina ;*

A

Mark_Ameba:
Cara vai no seu banco e coloca a SQL que voce quer que obtenha só o id e ve se funciona.

PS: Foto meiga lina ;*


Minha intenção não é obter o id, e sim que ele aparece em tempo de execução na JTable, e todo tipo de consulta que você pensar eu ja fiz no SQL, lá da certo concerteza, mas na JTable não aparece…Mark_Ameba, ja fiz Trigger,Ponteiro,Function e etc. Meu professor de Banco de Dados me ajudou a fazer, mesmo assim continua vindo com ID igual a zero, é o erro mais Sinistro que ja vi na minha vida… :twisted:

lina


Minha intenção não é obter o id, e sim que ele aparece em tempo de execução na JTable, e todo tipo de consulta que você pensar eu ja fiz no SQL, lá da certo concerteza, mas na JTable não aparece…Mark_Ameba, ja fiz Trigger,Ponteiro,Function e etc. Meu professor de Banco de Dados me ajudou a fazer, mesmo assim continua vindo com ID igual a zero, é o erro mais Sinistro que ja vi na minha vida… :twisted:

Oi,

Coloque a sua classe contato, por favor…

Mark_Ameba:
Cara vai no seu banco e coloca a SQL que voce quer que obtenha só o id e ve se funciona.

PS: Foto meiga lina ;*

É… rs

Tchauzin!

Marky.Vasconcelos

Cara… esse erro é muito sinistro.

Não sei por que voce insiste em não pesquisar.
Voce quer que seu objeto adivinhe seu ID ou que ele pesquise no banco qual é o ID respectivo a ele?

A

Mark_Ameba:
Cara… esse erro é muito sinistro.

Não sei por que voce insiste em não pesquisar.
Voce quer que seu objeto adivinhe seu ID ou que ele pesquise no banco qual é o ID respectivo a ele?


Não estou entendendo o que você quer dizer??
passe sua teoria para código…

A
lina:
Minha intenção não é obter o id, e sim que ele aparece em tempo de execução na JTable, e todo tipo de consulta que você pensar eu ja fiz no SQL, lá da certo concerteza, mas na JTable não aparece...Mark_Ameba, ja fiz Trigger,Ponteiro,Function e etc. Meu professor de Banco de Dados me ajudou a fazer, mesmo assim continua vindo com ID igual a zero, é o erro mais Sinistro que ja vi na minha vida....... :twisted:

Oi,

Coloque a sua classe contato, por favor...

Mark_Ameba:
Cara vai no seu banco e coloca a SQL que voce quer que obtenha só o id e ve se funciona.

PS: Foto meiga lina ;*

É.. rs
Tchauzin!

Ta ai a classe Contato, mas acho que ela não tem nada a ver com o erro!!!!
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;
	}
        //Construtor utilizado especialmente para busca
        public Contato(String nome){
            this.nome = nome;
        }



	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;
	}




}
A

Boa tarde Galera.. Até que enfim conseguir resolver esse problema Sinistro, de uma maneira bem fácil e Inteligente :)..
fiz o seguinte.:
Eu criei um metodo dentro do DAO para buscar no Banco de Dados logo após a inseção o id referente ao nome digitado dentro do TextFild na tela de cadastro..

ESSE MÉTODO AQUI...
//Método criado para buscar o Id do usuario, para que ele possa aparecer
        //em tempo de execução naJTable.. =]
        public int buscaID(String nome) throws SQLException{

         Connection conn = Conexao.getConexao();
         Contato contato = new Contato(nome);

         String val = "Select idusuario from usuario where nome = ?";
         PreparedStatement stmt = conn.prepareStatement(val);
         stmt.setString(1, contato.getNome());
         ResultSet rs = stmt.executeQuery();
         while(rs.next()){

                      contato.setIdusuario(rs.getInt("idusuario"));
                       num = contato.getIdusuario();
                }
             stmt.close();
             rs.close();
             return num;

    }
depois antes de passar o contato para o TableModel eu chamei o método após a inserção e passei o valor do TextFild pra ele.. ESSA PÁRTE DO CÓDIGO AQUI...
.........................................

         Contato contato = new Contato(tf_nome.getText() , tf_idade.getText() , tf_telefone.getText());
            try {
                
                cont.cadastrarContato(contato.getNome(),contato.getIdade(),contato.getTelefone());
                int num = dao.buscaID(contato.getNome());// CHAMANDO O MÉTODO DE buscarID DO DAO
                
  ..............................................................
depois setei esse valor dentro do Contato, logo após setei o contato no modelo.. ESSA PARTE DO CÓDIGO AQUI
...........................................................
         contato.setIdusuario(num);
                modelo.add(contato);
         ...........................................................
O botão cadastrar por completo fica assim, sem corta partes de código para explicação....
private void bt_cadastrarActionPerformed(java.awt.event.ActionEvent evt) {                                             

        if((evt.getSource() == bt_cadastrar) && (verificarDados())){
            ContatoNegocio cont = new ContatoNegocio();
            ContatoTableModel modelo = (ContatoTableModel)tabela.getModel();
            contatoDAO dao = new contatoDAO();
            
            // Contato Criado para utilizar no tablemodel, para que ele
            // possa indentificar o novo contato
            Contato contato = new Contato(tf_nome.getText() , tf_idade.getText() , tf_telefone.getText());
            try {
                
                cont.cadastrarContato(contato.getNome(),contato.getIdade(),contato.getTelefone());
                int num = dao.buscaID(contato.getNome());
                contato.setIdusuario(num);
                modelo.add(contato);
               
                
                
            } catch (SQLException ex) {
                Logger.getLogger(ContatoFrame.class.getName()).log(Level.SEVERE, null, ex);
            }
            JOptionPane.showMessageDialog(null,"Cadastrado Com Sucesso!!!");
            limparCampos();
                
            
        }
    }
Agora sempre que cadastro, o ID do mesmo aparece em tempo de execução na JTable.... Muito obrigado mais uma vez a todos vocês por terem me ajudar a solucionar mais um Problema!! Abraço.. :mrgreen:
lina

Oi,

A diferença é que agora você utiliza o método setIdUsuario() e anteriormente apenas passava o mesmo no construtor e adicionando a classe contato.

Parabéns! Não tinha pensado dessa forma :wink:

Obs.: Edit seu primeiro post e coloque a tag [RESOLVID] no inicio ou no final. ok?

Tchauzin!

Marky.Vasconcelos

Orra… problema dificil esse.

E no final das contas voce fez exatamente o que eu te falava desde o outro tópico.

Parabéns.

Criado 14 de abril de 2010
Ultima resposta 22 de abr. de 2010
Respostas 38
Participantes 5