Imprimir Gráfico JavaFx

Boa tarde estou desenvolvendo uma aplicação e queria saber se é possível gerar um gráfico em barra que me mostre a quantidade de clientes cadastrados e outro que me mostre a quantidade de Os emitidas. É possível o gráfico atualizar sozinho sempre que o banco atualiza ou preciso sempre fazer manualmente a atualização ?

Sim é possível, e é possível fazer atualizar automaticamente.

Como eu faria isso ? vc tem algum link mostrando isso sendo feito ?


Esses dois link foram os que me ajudaram quando precisei.

1 curtida

Precisa chamar a rotina que atualiza o grafico a partir dos dados atualizados.

1.Chamando atraves do disparo do banco de dados, cria-se um ouvinte no programa Java.
Supondo usar o PostgreSQL precisa de um driver JDBC(assincrono) especifico .

http://impossibl.github.io/pgjdbc-ng/

    import com.impossibl.postgres.api.jdbc.PGConnection;
    import com.impossibl.postgres.api.jdbc.PGNotificationListener;
    import com.impossibl.postgres.jdbc.PGDataSource;    
    import java.sql.Statement;

    public static void listenToNotifyMessage(){
        PGDataSource dataSource = new PGDataSource();
        dataSource.setHost("localhost");
        dataSource.setPort(5432);
        dataSource.setDatabase("database_name");
        dataSource.setUser("postgres");
        dataSource.setPassword("password");

        PGNotificationListener listener = (int processId, String channelName, String payload) 
            -> System.out.println("notification = " + payload);

        try (PGConnection connection = (PGConnection) dataSource.getConnection()){
            Statement statement = connection.createStatement();
            statement.execute("LISTEN test");
            statement.close();
            connection.addNotificationListener(listener);
            while (true){ }
        } catch (Exception e) {
            System.err.println(e);
        }
    }


Cria um trigger no banco de dados

    CREATE OR REPLACE FUNCTION notify_change() RETURNS TRIGGER AS $$
        BEGIN
            SELECT pg_notify('test', TG_TABLE_NAME);
            RETURN NEW;
        END;
    $$ LANGUAGE plpgsql;
    Assign a trigger for every table you want to track:

    CREATE TRIGGER table_change 
        AFTER INSERT OR UPDATE OR DELETE ON table_name
        FOR EACH ROW EXECUTE PROCEDURE notify_change();

2.Outra forma pessima de fazer isso é ter uma Thread fazendo uma checagem a cada tempo , digamos 5 segundos realizar uma pesquisa no banco pra saber se os dados foram alterados, se o retorno for positivo, chama a rotina que altera o grafico.

3.Usando RMI CallBack, essa é otima mas depende de banco de dados que suportam
Trigger (Gatilho) num servidor e ele conversa com sua aplicação cliente, se insistir nessa
solução, com tempo posso ver um exemplo que tenho aqui e te postar.

Bom, penso que respondi até d+ sem perguntar ao certo sobre sua duvida real, mas tanto na opção 1 quanto 3, o grafico somente será atualizado quando a alteração no banco de dados acontecer de fato, isso poupa muitos recursos e é extremamente profissional e eficiente.

No mundo real essas soluções que postei fazem parte de uma exceção de processamento.
Geralmente os casos de uso são mais simples, o usuario escolhe a opçao no menu pra ver o grafico e este simplesmente le o dados necessarios, processa e exibe.

Salvo nos caso em que precisa mesmo ter um grafico sempre atualizado por questão de performance, então serão soluções bem vindas.

Aonde eu baixo esse drive ? eu entro no site e ele não aparece nada só um texto