Ola,
Estou fazendo um select simples para jogar todo o conteudo de uma tabela do banco em uma jtable.Esta jtable é a unica que eu uso o default table model pois não achei necessario criar um modelo para isso.So que a minha tabela esta sendo criada com valores vazios. :roll:
Alguém pode me ajudar a encontrar o erro no meu codigo?
Obrigada :wink:
Não tenho muita certeza, mas acho que isto if(resultado.next()); e while (resultado.next() ) ;
não fazem nada…
P
paty_trind
oi!
olha só eu comentei este if e este while e a classe nem compilou
tipo o if é para se o resultado da pesquisa nao for “vazio” eu colocar ele na tabela…
e o while na verdade é um do while
tipo so esta sendo criada uma tabela vazia =(
drsmachado
O problema é que com o “;” no final, a instrução é encerrada.
Você não tem que comentar, tem que colocar os mesmos nos blocos adequados
if(blablabla){
logicaaqui
}
Como está, com “;” ao fim da instrução, ele não irá verificar.
P
paty_trind
Bah drsmachado não sei o que fazer ja coloquei os {} para determin ar o bloco de código do if e while mas não ta funcionando
try
{
...
if(resultado.next()){
..
do
{
...
}
while (resultado.next() ) ;{
...
}
}
}
catch (SQLException erro) {
erro.printStackTrace();
}
Ah e se eu tento tirar o ; do while da erro :shock: de compilação diz que falta colocar ;
;)bg pela ajuda
P
paty_trind
A minha tabela ainda esta sendo criada sem o resultado do banco =(
Segue um print da minha tela com esta tabela.Eu não alterei mais nada no código!
obrigada
Terceiro, NÃO é nada nada adequado a mesma classe da camada de apresentação acessar o banco!
Quarto, agora vou tentar ver teu código rs.
CintiaDR
Comentários:
O nome das colunas na tabela é dinâmico? É meio esquisito precisar recuperar o nome das colunas dinamicamente.
De qualquer maneira, vá debugando e vê se entra no while certinho.
Terceiro, NÃO é nada nada adequado a mesma classe da camada de apresentação acessar o banco!
quanto ao default table model esta é a unica classe em que utilizo como modelo
deve se criar uma classe auxiliar para jogar o resultado das pesquisas do banco e depois na classe principal pegar os valores da mesma?
fiz as alterações que tu sugeriste no tópico acima mas minha tabela ainda esta sendo criada vazia
drsmachado
Bom dia, Paty.
Bom, se tua tabela está sendo renderizada vazia, significa que ou a consulta está errada (a query) ou a tabela cargahoraria está vazia.
Como a sintaxe "select * from cargahoraria" contém apenas o * e nenhum where, considerarei que esteja correta.
Já a segunda questão, a tabela estar vazia, sugiro executar a mesma query diretamente no banco de dados (ou no mysql workbench ou mysql query browser ou qualquer administrador de banco de dados que aceite query, incluindo aí o prompt do próprio mysql).
P
paty_trind
oi drsmachado!
Executei a query diretamente no banco como tu disseste e la deu certo como no print que segue em anexo…
acho que talvez o problema esteja na montagem da minha tabela
obrigada!
Ok, para finalizar, troque o switch(rsmd.getColumnType(i))
{
case Types.VARCHAR:
linhaAtual.addElement(resultado.getString(i));break;
case Types.TIMESTAMP:
linhaAtual.addElement(resultado.getDate(i));break;
}
por
while(rs.next()){
for(inti=1; i <= rsmd.getColumnCount(); i++ ) // vc tem CERTEZA que não é base 0 esse cara?? {
System.out.println(rs.getString(i));
}
}
Se houver alguma saída, é a montagem da tabela que está errada, realmente.
P
paty_trind
ele imprime mas a tabela esta vazia tu tens razão é algo na montagem dela que estou fazendo errado
arrumei aqui fazendo o seguinte:
private void geraTabela()
{
try
{
Vector<String> cabecalho = new Vector<String>();
Vector<Vector> linhas = new Vector<Vector>();
resultado = comando.executeQuery("select * from cargahoraria");
ResultSetMetaData rsmd = resultado.getMetaData();
for( int i = 1; i <= rsmd.getColumnCount(); ++i )
cabecalho.addElement( rsmd.getColumnName( i ) );
while (resultado.next())
{
Vector<Object> linhaAtual = new Vector<Object>();
for ( int i = 1; i <= rsmd.getColumnCount(); i++ )
{
linhaAtual.addElement(resultado.getString(i));
}
linhas.addElement(linhaAtual);
}
while (resultado.next());
table = new JTable( linhas, cabecalho );
JScrollPane scroller = new JScrollPane( table );
scroller.setVisible(true);
scroller.setBounds(300, 80, 550, 200);
tela.add(scroller, null);
}
catch (SQLException erro) {
erro.printStackTrace();
}
}
agora esta funcionando!!!
obrigada Drsmachado!!!!!!!
;)
drsmachado
Eu trocaria o Vector por um array de Object, inserindo diretamente na linha.
Outra coisa, o teu switch/case não está tendo nenhuma função, tendo em vista que, independente de ser Date ou ser varchar, ele está inserindo no vector.
Considerando que você sabe quais colunas a tabela possui e utiliza um DefaultTableModel, eu faria assim: