Omitir determinados valores em um JTable com dados do banco

Tenho uma tabela no banco com várias colunas, mas nao necessariamente todas sao sempre preenchidas. Logo, vários campos ficam com ‘null’. No meu programa, tenho uma tela onde o usuário pode consultar esses dados. O problema é que como há vários campos ‘null’ no banco, aparecerem vários campos com ‘0’ no programa (JTable).

Alguém tem ideia de como fazer pra mostrar na JTable apenas as colunas com valores diferente de ‘0’? Porque se eu dou um select com “where x != 0”, por exemplo, toda a linha é ignorada, ainda que tenha 1 ou 2 colunas com dados diferentes de 0. Honestamente acredito que isso nem seja possível, mas nao custa perguntar aqui pra vcs que conhecem muito.

Como alternativa, a ideia que eu tive foi simplesmente setar o texto do campo pra " " se o valor for 0, já seria menos pior que aparecendo 0 em todo canto. Mas nao peguei o jeito de como mudar isso, já que os dados vem do banco.

Esse é o método onde eu trago os dados do banco:

 private void preencherTabela(String Sql) {
    ArrayList dados = new ArrayList(); // Linhas
    String[] colunas = new String [] {"Data", "Temperatura Inicial", "Temperatura Alterada", "Resultado Inicial", "Resultado Final", "Analista"};

    conex.conectar();
    conex.executaSql(Sql);
    
    try{
        conex.rs.first();
        
        do{
            dados.add(new Object[] {conex.rs.getTimestamp("data"), conex.rs.getDouble("temp_inicio"), conex.rs.getDouble("temp_fim"), conex.rs.getDouble("result_inicio"), conex.rs.getDouble("result_fim"), conex.rs.getString("analista")});

         } while(conex.rs.next());
    
    } catch (SQLException ex){
        JOptionPane.showMessageDialog(null, "Erro ao preencher tabela \n " +ex.getMessage());
    }
    
    ModAlteraTabela modelo = new ModAlteraTabela(dados, colunas);
    jTableRelAlteracoes.setModel(modelo);

E dentro de um botao eu chamo esse método e configuro o tamanho das colunas:

private void jButtonBuscarActionPerformed(java.awt.event.ActionEvent evt) {                                              
    java.sql.Date dataDesde = new java.sql.Date(jDateChooserDesde.getDate().getTime());
    java.sql.Date dataAte = new java.sql.Date(jDateChooserAte.getDate().getTime());

    preencherTabela("SELECT * FROM dados_provas WHERE data BETWEEN '" +dataDesde+"' AND '" +dataAte+ "' ORDER BY data desc");

    jTableRelAlteracoes.getColumnModel().getColumn(0).setMinWidth(120);
    jTableRelAlteracoes.getTableHeader().getColumnModel().getColumn(0).setMaxWidth(120);

Alguém sabe como posso tentar omitir os valores 0? Ou simplesmente criar uma condicao pra que se o valor for 0, mostrar um espaco vazio (" ")? To perdidaco…

Assim sai a JTable no programa, quero me livrar desse monte de 0…

Testar a coluna no do... while não resolve? Mas mostraria o que no lugar do zero?

Desculpa cara, nao entendi.

Pode ser até um String vazio, deixando o campo em branco. Assim já nao teria muito problema.

1 - No código:

try{
conex.rs.first();

	do{
		String data = conex.rs.getTimestamp("data") == 0.0  ? "-" : conex.rs.getTimestamp("data");
		String tempIni = conex.rs.getDouble("temp_inicio") == 0.0 ? "-" : conex.rs.getDouble("temp_inicio");
		[...]
		
		dados.add(new Object[] {
			data,
			tempIni,
			[...]
		});

	} while(conex.rs.next());

} catch (SQLException ex){
	JOptionPane.showMessageDialog(null, "Erro ao preencher tabela \n " +ex.getMessage());
}

2 - No SQL:

Fazer uso do case SQL.

SELECT    
CASE data     
	 WHEN null THEN ''     
	 WHEN 0.0 THEN ''          
	 ELSE data     
END AS data,  
CASE temp_inicio     
	 WHEN null THEN ''     
	 WHEN 0.0 THEN ''          
	 ELSE temp_inicio     
END AS temp_inicio,  
[...]
FROM TABLE dados_prova;

Obs.: São sugestões baseadas na lógica, ou seja, não testadas.
Mais sobre Case SQL: Case in SQL.

1 curtida

Opa, valeu pela sugestao. O que eu vou fazer é simplesmente criar uma trigger no banco pra dar update em qualquer valor que seja null ou 0, pra trocar pra ‘-’. Acho que é a solucao mais simples.