Salve galera,
Estou com o seguinte problema: queria fazer uma listagem de alguns dados de meu bando de dados, só que a hora q preenche o JTable, só aparece os dados da última posição de minha tabela do meu banco.
Segue o código:
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
conexao = DriverManager.getConnection(URLc,"","");
SQLStatC1 = conexao.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
String consulta = "SELECT * FROM CD ORDER BY Nome_CD";
RsC1 = SQLStatC1.executeQuery(consulta);
String cd="";
String[] colunas = new String[]{"Cd"};
if (!(RsC1.next()))
{
JOptionPane.showMessageDialog(null, "Nenhum CD cadastrado","Informação",JOptionPane.WARNING_MESSAGE);
}
else { RsC1.previous(); }
while (RsC1.next())
{
cd = RsC1.getString("Nome_CD");
String[][] dados = new String[][]
{ {cd} };
modelo = new DefaultTableModel(dados,colunas);
}
tabela = new JTable(modelo);
tabela.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
RsC1.close();
conexao.close();
}
catch (SQLException e)
{
JOptionPane.showMessageDialog(null, e,"Erro",JOptionPane.ERROR_MESSAGE);
}
catch (Exception e)
{
JOptionPane.showMessageDialog(null, e,"Erro",JOptionPane.ERROR_MESSAGE);
}
Alguém tem uma solução?
Valeu.
[quote=brunobegnami][code] while (RsC1.next())
{
cd = RsC1.getString(“Nome_CD”);
String[][] dados = new String[][]
{ {cd} };
modelo = new DefaultTableModel(dados,colunas);
} [/code]
Alguém tem uma solução?[/quote]
Tire a última linha de dentro do while.
Não deu certo, se eu comento a linha, ele não lista nada, e se eu tiro fora do while, e coloco depois, dá erro:
ListaCd.java:75: cannot resolve symbol
symbol : variable dados
location: class ListaCd
modelo = new DefaultTableModel(dados,colunas);
^
1 error
O que eu quiz dizer é para você rever a lógica que está usando aí. Você está criando um novo model a cada iteração do while. O que está totalmente errado. Na verdade vc tem que ter um model apenas e ir adicionando dados ao model a cada iteração do while. Sacou?
Saquei. Mas, como está zuado, achei um artigo de JTable aqui no site do Guj, e tentei fazer algumas adaptações, eis o código mudado:
ArrayList dados = new ArrayList();
String[] colunas = new String[] { "Nome do Cd" };
boolean [] edicao = {false, true};
if (!(RsC1.next()))
{
JOptionPane.showMessageDialog(null, "Nenhum CD cadastrado","Informação",JOptionPane.WARNING_MESSAGE);
}
else { RsC1.previous(); }
while (RsC1.next())
{
cd = RsC1.getString("Nome_CD");
dados.add(new String[] { cd });
}
SimpleTableModel modelo = new SimpleTableModel(dados, colunas, edicao);
tabela = new JTable(modelo);
tabela.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
tabela.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
e está com o seguinte erro:
ListaCd.java:82: cannot resolve symbol
symbol : class SimpleTableModel
location: class ListaCd
SimpleTableModel modelo = new SimpleTableModel(dados, colunas, edicao);
^
ListaCd.java:82: cannot resolve symbol
symbol : class SimpleTableModel
location: class ListaCd
SimpleTableModel modelo = new SimpleTableModel(dados, colunas, edicao);
^
2 errors
Sou meio leigo nessas coisas, mau ae.
Valeu.
A classe SimpleTableModel não é da API padrão do Java. Provavelmente tem o código dela no artigo. Veja lá!
Haaaaaaaaaa, agora sim, entendi.
Faltou a classe SimpleTableModel (SimpleTableModel.java).
Agora tá funcionando.
Valeu danieldestro.