Dúvidas em java

22 respostas
java
V

Sou iniciante em java e não estou conseguindo rodar uma aplicação com a tabela vazia, da uma exceção(catch) da uma mensagem de erro, dai surgiu a dúvida posso tratar esta tabela não dando nenhuma mensagem de erro ou existe um método que pega a tabela vazia

22 Respostas

L

Que tabela? É um banco de dados? Uma estrutura em memória?

Qual Exception? Qual mensagem de erro?

Cola o código aqui e aponta onde está o erro. Precisamos de mais contexto para te ajudar.

V

É uma tabela de um banco de dados
Dá um Exception quando a tabela do banco de dados esta vazia

public void mostrar_dados()
{
    try
    {
  //      testar_navegacao();
        tf_codigo.setText(con_cidade.resultset.getString("codigo"));
        tf_nome.setText(con_cidade.resultset.getString("nome"));
    }
    catch(SQLException erro)
    {
       JOptionPane.showMessageDialog(null,"Não localizou dados "+erro);
        
        
    }
}
V

Oi boa noite!

Você deu uma olhada no meu problema?

obrigado

J

Tenta isolar o código, para evitar que a conexão ou o resultset cheguem nulos nesse trecho do código.

if (con_cidade == null) {
    return; //sem conexão com o BD
}

if (con_cidade.resultset == null) {
    return; //resultset não possui dados
}

tf_codigo.setText(con_cidade.resultset.getString("codigo"));     
tf_nome.setText(con_cidade.resultset.getString("nome"));
V

Ola Jonathan!
O erro ainda permanece
E a tabela do banco de dados que esta vazia

J

Tenta fazer o seguinte:

if (con_cidade.resultset.first()) {
    tf_codigo.setText(con_cidade.resultset.getString("codigo"));     
    tf_nome.setText(con_cidade.resultset.getString("nome"));
}
V

Já tentei colocar este código, mas quando a tabela e vazia da uma exceção, mas eu quero pegar quando a tabela e vazia e controlar a navegação, tipo ir para o primeiro registro, para o próximo, anterior, ultimo estas coisas.
obrigado

V

Entao coloquei o seguinte codigo e deu certo

if (con_cidade.resultset.first() == false) 
 {
       JOptionPane.showMessageDialog(null,"Não existem dados para esta cidade"); 
       return;
 }

so vai entrar aqui quando a tabela estiver vazia e nao da a excessao

e para controlar o botao de navegacao (primeiro, proximo, anterior, ultimo) que foi clicado usei uma variavel

e para controlar a linha da tabela usei uma outra variavel e ta funcionando

obrigado

J

Não é necessário testar a igualdade de valor pois o first() já retorna um valor boolean, no seu caso, como só entra no if se o retorno for false você só precisa fazer a negação, ficando assim!

if (!con_cidade.resultset.first())

Só não entendi o porquê do código que te passei não ter funcionado, pois você fez exatamente o que te falei, a mesma coisa, só que usando a negação para exibir uma mensagem de que não existiam dados, no exemplo que te passei o código só seria executado caso houvessem dados.

V

Quando excluo um registro auto-increment ele vai para onde? Fica algum lixo, acho que esse e o problema

J

Normalmente não, a não ser que você esteja mantendo uma instância do objeto que contém dados do registro recuperado para exclusão.

V

Acho que o problema ta no banco de dados, porque rodo o mesmo sql no banco e da o mesmo efeito, ta como notnull no banco

V

Por favor se você puder me ajudar, to com este problema e não to conseguindo continuar meu trabalho.

Obrigado

V

Desculpe e obrigado Jonathan expressei errado, deu certo, consigo saber quando a tabela esta vazia no codigo, mas quando excluo registros, e volto a incluir o mesmo continua acrescentando na sequencia, quero saber como faco para quando excluir um registro, apague na tabela, limpando a mesma. As tabelas foram convertidas do access para mysql e ta como autoincrement e notnull

obrigado

J

Quando você diz remover da tabela seria a tabela do banco de dados?
Ou você se refere a JTable?

V

Na tabela no banco de dados

J

Basta recuperar o id do registro desejado e fazer a exclusão via sql pela classe responsável.

V

Excluir o registro estou ate conseguindo, mas o meu problema e quando vou inserir um novo registro, mesmo com a tabela vazia, ele começa do ultimo registro, por exemplo, vou la e incluo 10 registros e excluo os mesmos e quando vou incluir novo registro, ele começa a partir do registro 11, quero limpar a tabela. Lá no banco de dados ta como autoincremet e notnull

T

Não basta excluir todos os dados, você precisar zerar o auto_increment referente à essa tabela. No MySQL, isso é feito assim

ALTER TABLE {tablename} AUTO_INCREMENT = 1

Substituindo {tablename} pelo nome da tabela.

Referência: https://stackoverflow.com/questions/8923114/how-to-reset-auto-increment-in-mysql

Para eliminar todos os registros e já zerar o auto_increment (basicamente, recriando a tabela), você pode dar uma olhada no comando truncate.

Abraço.

V

Obrigado deu certo!
Uma outra dúvida, estou começando a desenvolver um pequeno sistema, você acha que devo usar o hibernate ou não
obrigado

T

Isso depende, cada caso é um caso. Se é algo que você está fazendo só pra estudar, tanto faz.

Eu recomendaria começar com SQL puro, pra se acostumar com a sintaxe e não ter tantos problemas (como o que teve nesse tópico). Assim quando for pro Hibernate, vai saber melhor o que está acontecendo.

Abraço.

V

Concordo com você.

Obrigado

Criado 7 de janeiro de 2019
Ultima resposta 11 de mar. de 2019
Respostas 22
Participantes 4