Bom dia. Sou novo no fórum e também em Java. Após pesquisar na net adaptei para minha necessidade um código que importa um arquivo Xml e joga os dados numa Jtable.
Tenho duas dúvidas:
1º - Gostaria de ajuda para jogar esses dados que estão na Jtable para o banco de dados Postgres. Normalmente eu faria uma vinculação diretamente na Jtable com a Query, mas como não estou usando default table estou perdido e não sei como fazer isso.
2º - Nesse código utiliza-se StringTokenizer e pelo que vi algum tópico do Vini Godoy essa utilização não é recomendável. Estou com problema pois algumas vezes o nome da loja vai ser um nome composto (ex.: "Loja Principal"). Nesse caso a string está importando para o campo errado na Jtable, pois assume que o "espaço" entre os nomes deve constituir uma nova coluna. Alguém teria uma sugestão para contornar esse problema e concatenar o nome da filial mesmo quando tiver um espaço entre eles. Em Tempo: A segunda coluna deverá sempre ser o código do produto.
Desde já agradeço pela atenção.
Segue abaixo o código que estou utilizando:
Import org.w3c.dom.*;
import javax.xml.parsers.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;
public class XmlImport extends AbstractTableModel{
List data = new ArrayList();
List columns = new ArrayList();
private String[] cabec={"Filial", "Produto"};
public XmlImport() {
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse("d:/vendas.xml");
NodeList n1 = doc.getElementsByTagName("Filial");
NodeList n2 = doc.getElementsByTagName("Produto");
NodeList listOfPersons = doc.getElementsByTagName("Row");
String data1 = "", data2 = "", data3 = "";
for (int i = 0; i < listOfPersons.getLength(); i++)
{
data1 = n1.item(i).getFirstChild().getNodeValue();
data2 = n2.item(i).getFirstChild().getNodeValue();
String line = data1 + " " + data2 + " ";
StringTokenizer st2 = new StringTokenizer(line, " ");
while (st2.hasMoreTokens())
data.add(st2.nextToken());
}
columns.add("");
columns.add("");
} catch (Exception e)
{
e.printStackTrace();
}
}
public int getRowCount() {
return data.size() / getColumnCount();
}
public int getColumnCount() {
return columns.size();
}
@Override
public String getColumnName(int columnIndex){
return cabec[columnIndex].toString();
}
public Object getValueAt(int rowIndex, int columnIndex) {
return (String) data.get((rowIndex * getColumnCount())+ columnIndex);
}
public static void main(String argv[]) throws Exception {
XmlImport a = new XmlImport();
JTable table = new JTable();
table.setModel(a);
JScrollPane scrollpane = new JScrollPane(table);
JPanel panel = new JPanel();
panel.add(scrollpane);
JFrame frame = new JFrame();
frame.add(panel, "Center");
frame.pack();
frame.setVisible(true);
}
}