Olá Pessoal, bom dia a todos.
Graças a ajuda dos colegas daqui já resolvi um problema, porem apareceu outro rsrs.
Ao iniciar a aplicaçao é carregada uma tabelas com os dados do banco, feito isso o usuario tem a opçao de adicionar uma ou mais novas linhas na tabela, o problema é, como faço pra atualizar meu banco de dados com essas novas linhas que foram inseridas.
OBS. ja tenho metodos que capturam os dados da linha
Obrigado e bom dia a todos.
Ah eestou usando MySql
Olá,
Os dados que estão num jTable são uma coleção de objetos, logo vc pode encapsular essa coleção dentro de seu objeto maior. Tipo: Uma pessoa possui vários telefones. No caso vc passaria dentro do objeto pessoa a coleção de telefones, e na hora de executar o seu método q insere dados, vc verifica se cada item da coleção ainda não está inserida, se tiver atualize-o.
me intrometendo no assunto, estou com um problema parecido, preciso adicionar em um banco os dados o que eu insiro na tabela, o metodo que eu criei esta rodando certinho e removendo corretamente, mas nao sei como adicionar tres linhas por exemplo, tenho que criar um vetor para adicionar na tabela ??
valew
Cara, quando eu tenho uma coleção pra adicionar, eu itero ela , checo pra ver se o registro existe na base, senão existir insiro, se existir atualizo.
Caro cecaldas, teria como vc passar o trecho de codigo que faz isso, naum sei utilizar esse Iterator
Obrigado
Não sei se essa é a melhor forma, mas funciona:
Collection telefones = new ArrayList();
for (Iterator iter = telefones.iterator(); iter.hasNext();) {
Object element = (Object) iter.next();
if(existeObjNobanco(element)){
atualizaobj(element);
}else {
inserenobanco(element);
}
}
Desculpa pela falta de identação.
:oops:
Cada linha da tua tabela é um objeto? Então coloca cada linha em uma Collection, de acordo com as suas necessidades vc escolhe o tipo de coleção.
mas para cada objeto eu tenho que fazer um array ??
Pedido
Peca
Quantidade
eu apénas adiciono na tabela, nao sei se eu tenho que usar um collection, o que seria melhor eu usar para inserir os dados em um banco de dados, to perdido com relacao a isso !
valew
Você não precisa e nem deve fazer um array pra cada objeto. Como vc faz pra inserir uma peça na sua tabela? Com que tableModel vc trabalha?(se vc não souber o q eh um tablemodel veja em: http://www.guj.com.br/java.artigo.140.1.guj e http://www.guj.com.br/java.artigo.147.1.guj).
Quando eu trabalho com jtable, eu crio meu próprio tablemodel, os valores da minha tabela ficam dentro de uma coleção, aí é só adicionar o objeto na Coleção(apenas uma coleção).
Se você quiser que eu dê uma olhada no seu código, anexa ele aí.
bem, nao sei dizer se é infelizmente ou felizmente eu trabalho com o netbeans, ate gosto e acho leve, talvez o eclipse ou ou outra IDE seja mais leve mas eu nunca a usei, bem nao estamos aqui para fazer disso, pois bem, eu criei um JTable e faco o molde dele pela propriedade do JTable, pois imagino que eu uso, mas posttarei o codigo para inserir e remover itens na tabela, se quiser eu posto como o netbenas criou essa JTable,
Adicionar
[code]
private void addPedidoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addPedidoActionPerformed
String jcPedido = JC_Pedido.getSelectedItem().toString();
String jcQtd = JC_Quantidade.getSelectedItem().toString();
System.out.println(jcPedido);
System.out.println(jcQtd);
if ( !JC_Pedido.getSelectedItem().toString().equals("") && !QuantidadePedido.getText().equals("") && !JC_Quantidade.getSelectedItem().toString().equals("")) {
javax.swing.table.DefaultTableModel tabelaParaPedido = (javax.swing.table.DefaultTableModel)jTable2.getModel();
tabelaParaPedido.addRow(new Object[]{ jcPedido, QuantidadePedido.getText(), jcQtd });
QuantidadePedido.setText("");
JC_Pedido.getSelectedItem().toString();
JC_Quantidade.getSelectedItem().toString();
}else {
javax.swing.JOptionPane.showMessageDialog(instanciafrmVendas, "Preencha todos os campos corretamente ",
"Sistema de Frigorífico", JOptionPane.WARNING_MESSAGE);
}[/code]
Remover
private void remPedidoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_remPedidoActionPerformed
int[] itens = jTable2.getSelectedRows();
javax.swing.table.DefaultTableModel tabelaDependente = (javax.swing.table.DefaultTableModel)jTable2.getModel();
for(int contador = (itens.length-1); contador >= 0; --contador)
tabelaDependente.removeRow(itens[contador]);
}//GEN-LAST:event_remPedidoActionPerformed
Para criar a tabela, eu colhi algumas coisas do codigo que o netbeans criou, nao esta completo e se implementar em algum lugar deve nao funcionar, mas esta ai:
jTable2.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0)));
jTable2.setFont(new java.awt.Font("Arial", 0, 12));
jTable2.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
},
new String [] {
"Pedido", "Quantidade", "Tipo"
}
) {
Class[] types = new Class [] {
java.lang.String.class, java.lang.Integer.class, java.lang.Integer.class
};
public Class getColumnClass(int columnIndex) {
return types [columnIndex];
}
});
jTable2.setCellSelectionEnabled(true);
jTable2.setNextFocusableComponent(JC_Pedido);
jTable2.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
jTable2MouseClicked(evt);
}
});
Veja se vc entende
Na gui eu crio o meu TableModel:
TableModelTelefone modelo = new TableModelTelefone();
Um exemplo de TableModel:
public class TableModelTelefone extends AbstractTableModel {
public final static String[] columnNames = { "Código", "Número", "Tipo",
"Horário" };
private Vector values = new Vector();
public TableModelTelefone() {
}
public int getRowCount() {
return values.size();
}
public int getColumnCount() {
return columnNames.length;
}
public Object getValueAt(int row, int column) {
Telefone t = (Telefone) values.get(row);
if (column == 0) {
if (t != null) {
if (t.getCodigoArea() == 0)
return "91";
else if (t.getCodigoArea() == 1)
return "11";
}
}
if (column == 1) {
return t.getNumero();
}
if (column == 2) {
if (t.getTipo() == 0) {
return "Residencial";
} else if (t.getTipo() == 1) {
return "Comercial";
} else if (t.getTipo() == 2) {
return "Celular";
} else
return "Fax";
}
if (column == 3) {
return t.getHoraPreferencial();
}
return "";
}
public String getColumnName(int column) {
return columnNames[column];
}
public void inserir(Telefone obj) {
try {
if (!values.contains(obj)) {
obj.setId(i);
values.add(obj);
} else
values.setElementAt(obj, values.indexOf(obj));
fireTableDataChanged();
} catch (Exception e) {
e.printStackTrace();
}
}
public Telefone procurar(int row) {
Telefone obj = (Telefone) values.get(row);
return obj;
}
public void remover(int row, Telefone obj) throws Exception {
if (row != -1) {
values.remove(row);
fireTableDataChanged();
} else {
JOptionPane.showMessageDialog(null,
"Não foi encontrada nenhuma pessoa com o id = ");
}
}
public void remover(int row) {
if (row != -1) {
values.remove(row);
fireTableDataChanged();
} else {
JOptionPane.showMessageDialog(null,
"Não foi encontrada nenhuma pessoa com o id = ");
}
}
public Collection getAll() {
return values;
}
}
Quando kero inserir um telefone, na gui eu crio um objeto do tipo que vou inserir e pego os dados dos campos. Tipo:
Telefone fone = new Telefone();
fone.setNumero(campoNumero.getText());
foen.setOutraCoisa(campooutracoia.getText());
Então eu chamo a instancia do meu modelo:
modelo.inserir(fone);
Esse método vai inserir um obejto do tipo telefone na minha coleção, que no TableModelTelefone chama-se values.
Na hora de gravar todo o objeto pessoa, eu faço:
Pessoa p = new Pessoa();
p.setNome("string");
p.setTelefone(modelo.getAll());//esse método pega uma coleção como parâmetro, todos os telefones estrão dentro dessa coleção
Aí é só chamar teu método de inserção no bd pra fazer o resto, claro que tu poderias colocar uma padrões de projeto aí, mas isso fica pra mais tarde, uma coisa de cada vez.
Espero que vc entenda, qq coisa estamos aí.
entendi sim ! so que agora vou adaptar ao meu codigo, imagino que assim eu resolveria meu problema !
nao esta dificil, por exemplo: o que vc chama de Telefone é o TableModel, o que eu chamo de jTable2 seria meu TableModel, estou correto, se eu criar um objeto que receba todos os valores me facilitaria, entao quando eu fosse inserir no banco eu so faria um INSERT do meu objeto, correto ??
O objeto Telefone é um JavaBean;
O Table Model é uma classe que estende do Table Model padrão do Jtable (DefaultTableModel), é a classe que manipula os os dados que são exibidos em uma tabela, é o modelo do padrão MVC, seria bom vc dar uma lida no artigo de TableModel que citei em um desses posts.
O jtable2 é apenas a sua tabela, os dados vão ficar no modelo da tabela (TableModelTelefone).
Eu vi agora q esqueci de setar o modelo na tabela.
Ao criar a tabela(jTable2) e o Modelo (TableModelTelefone).
JTable jtable2 = new JTable();
TableModelTelefone modelo = new TableModelTelefone();
jtable2.setModel(modelo);
Quanto a sua pergunta do insert, depende do que vc estiver usando, se vc tiver usando um Framework de mapeamento objeto-relacional como: hibernate, vc só mandaria o seu objeto pro insert dele que ele seria persistido, mas se vc tiver fazendo na mão com jdbc, aí vc vai abrir esse objeto pessoa e inserir seus atributos nas respectivas colunas e o telefone vc faz como eu mostrei logo no início desse tópico.
Sacou?
Olá
Isto é um nojo. :?
Vai contra tudo que tenho dito sobre desenvolvimento de sistemas nos últimos 4 anos. Se o cara quer acessar uma base de dados direto a partir da camada de apresentação então usa o DBVisualizer que é free e já está pronto. Nem como exercício de curso colegial acho válido alguém fazer isto.
[]s
Luca
cecaldas o seu exemplo foi claro, mas nao consegi implementar o que voce fez nao ! consigo adicionar na tabela os dados normalmente, mas nao consigo criar uma collection para poder salvar todos os dados dentro. Entendi que se eu fizer assim eu posso adicionar na tabela, mas nao tem outra maneira para fazer isso ??
valew
Pq vc não consegue criar a collection para inserir todos os dados?(aliás, isso é um VO!) :?:
nunca criei uma collection e ontem de noite que eu tentei nao deu certo, fui adapatr ocodigo que cecaldas postou mas nao deu certo ! o meu DefaultTableModel chama tabelaDePedido, mas nao sei como criar o objeto, nao sei de onde tira-lo para falar a verdade ! posso usar o os atributos que eu vou inserir na tabela, mas so tenho isso como parametro !
Perai… vc nunca usou collections, e ja ta mexendo com Swing!? Nao ta na hora de voltar ao basico, nao?
pode ser ! talvez eu nunca tenha usado com esse nome, talves esteja faltando um pouco de conceito e por isso esteja aqui perguntando !