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!
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!
Anderson, posta o seu Model e a classe que o manipula 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!!!
MÉTODO QUE PREENCHE A JTABLE
[code]private void preencheTabela() throws SQLException{
ContatoNegocio cont = new ContatoNegocio();
List<Contato> lista = cont.listarContato();
ContatoTableModel modelo = new ContatoTableModel(lista);
tabela.setModel(modelo);
}[/code]
MINHA TABLEMODEL
[code]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);
}
}
[/code]
Posta o código de
ContatoNegocio.listarContato();
Erro sinistro esse seu ein.
[quote=Mark_Ameba]Posta o código de
ContatoNegocio.listarContato();
Erro sinistro esse seu ein.[/quote]
Pois, é eu também to achando… :mrgreen:
TA AI O MÉTODO
[code]public List listarContato() throws SQLException{
contatoDAO cDAO = new contatoDAO();
return cDAO.listar();
}[/code]
Ta entao posta contatoDAO.listar()
[b]Ta ai…
ContatoDAO.Listar()[/b]
[code]public List 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;
} [/code]
Ta bem Sinistro esse problema viu!!! :?
Oi,
Acho que o erro está aqui.:
[code]
public List 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);
}[/code]
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!
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!!
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 ;*
[quote=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 ;*[/quote]
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:
[quote]
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:[/quote]
Oi,
Coloque a sua classe contato, por favor…
[quote=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 ;*[/quote]
É… rs
Tchauzin!
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?
[quote=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?[/quote]
Não estou entendendo o que você quer dizer??
passe sua teoria para código…
[quote=lina][quote]
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:[/quote]
Oi,
Coloque a sua classe contato, por favor…
[quote=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 ;*[/quote]
É… rs
Tchauzin![/quote]
Ta ai a classe Contato, mas acho que ela não tem nada a ver com o erro!!!
[code]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;
}
}
[/code]
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…
[code] //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;
}[/code]
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…
[code]…
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
…
[/code]
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…
[code]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();
}
} [/code]
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:
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
Obs.: Edit seu primeiro post e coloque a tag [RESOLVID] no inicio ou no final. ok?
Tchauzin!
Orra… problema dificil esse.
E no final das contas voce fez exatamente o que eu te falava desde o outro tópico.
Parabéns.