Buscar

aps2019

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 39 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 39 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 39 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Atividade Prática Supervisionada APS 
DESENVOLVIMENTO DE UM SISTEMA PARA PREVENÇÃO, ACOMPANHAMENTO E CONTROLE DE UMA EPIDEMIAS EM 5 CIDADES DA GRANDE SÃO PAULO
 
Professor(a):
Marcos Antonio Rodrigues da Silva
Ciência da Computação
UNIVERSIDADE PAULISTA – CAMPOS ANCHEITA
SISTEMA DE BANCO DE DADOS PARA O CONTROLE DA DANGUE
 São Paulo
2019
Introdução 
Não é de hoje que a dengue é um dos grandes problemas de saúde púbica no Brasil, uma doença viral e de evolução benigna se assim estiver na forma clássica, e grave na forma hemorrágica. A dengue é um arbovirose (doenças causadas pelos chamados arbovírus, que incluem o vírus da dengue, Zika vírus, febre chikungunya e febre amarela) assim sendo um sério problema de saúde pública, especialmente nos países tropicais, como o Brasil ,onde as condições do meio ambiente favorecem o desenvolvimento e a proliferação do Aedes aegypti, principal mosquito vetor. Na América, o Aedes aegypti é a responsável pela transmissão da dengue. Outra espécie, Aedes albopictus, embora presente no Brasil, ainda não tem comprovada sua participação na transmissão, já na Ásia é um importante vetor. (2002. Ministério da Saúde, P.6-7)
O Aedes aegypti é um mosquito de hábito diurno, principalmente no início da manhã e no final da tarde; tem preferência por ambientes urbanos.O mosquito adquire o vírus ao se alimentar do sangue de doente que se encontra na fase de viremia, que começa um dia antes do surgimento da febre e vai até o sexto dia de doença. O vírus vai se localizar nas glândulas salivares do mosquito, onde se prolifera e aí permanece, deixando o artrópode infectante durante toda a sua vida. Uma vez infectada a fêmea do mosquito inocula o vírus junto com a sua saliva ao picar a pessoa sadia. Além disso, a fêmea também faz a transmissão transovariana do vírus para a sua prole, favorecendo a expansão da doença.3 Depois de inoculado no hospedeiro humano, o vírus entra nas células, se replica, produz progenitores (2010, Medicina (Ribeirão Preto), p.143)
A dengue pode apresentar diferentes formas clínicas, dentre elas, podem ser destacadas a dengue clássica, a dengue com complicações, a dengue hemorrágica e a síndrome do choque da dengue, que é a forma mais preocupante. A dengue clássica é a mais comum e destaca-se por causar febre alta (superior a 39°), dores de cabeça, no corpo, nas articulações e nos olhos; fraqueza, vômitos, manchas na pele e coceira.Geralmente esses sintomas não persistem por tempo superior a uma semana, entretanto, em alguns casos, pode ocorrer evolução para formas graves da doença.
Nas formas mais graves da dengue, alguns sintomas podem ser observados, como dores abdominais, vômitos constantes, tonturas, acúmulo de líquidos e hemorragias, principalmente no nariz e gengivas. Ao perceber qualquer um desses sintomas, deve-se procurar imediatamente os postos de saúde.
O diagnóstico da dengue é feito através de exames sorológicos ou então de detecção viral. Os testes sorológicos são os mais utilizados, mas só devem ser realizados após cinco dias de doença, uma vez que antes desse período nosso corpo ainda não possui anticorpos contra o vírus e o resultado será, portanto, negativo.
 (Vanessa Sardinha dos Santos, Doenças virais. Disponível em:<https://mundoeducacao.bol.uol.com.br/doencas/dengue.htm>. Acesso em:17 de maio de 2019)
Os casos de dengue cresceram 264% em 2019, informou o Ministério da Saúde. O balanço sobre os casos da doença no Brasil foi feito entre dezembro de 2018 e março de 2019.
Foram registrados 229.064 casos nas primeiras 11 semanas de 2019 (até 16 de março). No mesmo período de 2018 foram registrados 62,9 mil caso de dengue.
O Distrito Federal e os estados do Acre, Tocantins, São Paulo, Minas Gerais, Espírito Santo, Goiás e Mato Grosso do Sul foram os que registraram aumento do número de casos da doença. Todos registraram taxa de incidência maior que 100 casos por 100 mil habitantes, com destaque para o Tocantins, com incidência de 602,9 casos/100 mil habitantes.
Também houve um aumento de 67% no número de mortes pela doença, passando de 37 para 62 mortes em comparação com 2018. O estado de São Paulo, com 31 óbitos, é o que registrou o maior número de mortes pela doença no país. (G1, Casos de dengue crescem 264% em 2019, diz Ministério da Saúde
. Disponível em:<https://g1.globo.com/ciencia-e-saude/noticia/2019/03/25/casos-de-dengue-crescem-224percent-em-2019-diz-ministerio.ghtml>. Acesso em:18 de maio de 2019)
 Ainda Não existe tratamento específico para a dengue, por isso, recomendam-se apenas repouso e hidratação. Em casos mais graves, medidas especiais devem ser tomadas, tais como internação e hidratação venosa. É importante frisar que durante todo o período de tratamento não devem ser utilizados medicamentos que possuam ácido acetilsalicílico, uma vez que podem desencadear hemorragias por alterarem o mecanismo de coagulação.
Para prevenir-se da dengue, devemos lutar contra o mosquito, destruindo os criadouros da doença. É importante evitar o acúmulo de água parada, limpar sempre as caixas d’água e mantê-las fechadas, trocar a água de vasos de plantas aquáticas, secar os pratinhos dos vasos de plantas, limpar os ralos, tratar a piscina com cloro e nunca descartar lixo de maneira inadequada.
Por meio desse construiremos um sistema de banco de dados de cidades da grande São Paulo com a intenção de alertar o risco que aquela cidade apresenta, e que deve ter um olhar especial tanto das autoridades quanto da população.
Referencial teórico 
No processo de construção do algoritmo, cada etapa tem sua devida importância, assim trazendo no final o resultado satisfatório, de início o processo de construção é a base que sustenta toda a estrutura na qual foi realizada.
Esse sistema tem como foco, alertar e orientar as pessoas a terem um cuidado a mais sobre o tema Dengue, já que nos últimos anos teve um aumento expressivo no país. O sistema de banco de dados trás com ele uma alta pesquisa realizada no banco de dados do ministério da saúde com dados atualizados semanalmente, assim deixando mais transparente a realidade do dia a dia sobre esse vírus muito prejudicial à saúde para o povo brasileiro.
Um sistema de banco de dados onde aplicamos todo o ensinamento que aprendemos na aula e agora colocando em prática, usando normalização, da 1FN, 2FN e 3FN.
Normalização
A normalização processa a partir do qual se aplicam regras a todas as tabelas do banco de dados com o objetivo de evitar falhas no projeto, como redundância de dados e mistura de diferentes assuntos numa mesma tabela.
Ao projetar um banco de dados, se temos um modelo de entidades e relacionamentos e a partir dele construirmos o modelo relacional seguindo as regras de transformação corretamente, o modelo relacional resultante estará, provavelmente, normalizado. Mas, nem sempre os modelos que nos deparamos são implementados dessa forma e, quando isso acontece, o suporte ao banco de dados é dificultado.
Em ambos os casos, é necessário aplicar as técnicas de normalização, ou para normalizar (segundo caso citado), ou apenas para validar o esquema criado (primeiro caso citado). Aplicando as regras descritas a seguir, é possível garantir um banco de dados mais íntegro, sem redundâncias e inconsistências.
Existem 3 formas normais mais conhecidas:
1FN - 1ª Forma Normal: todos os atributos de uma tabela devem ser atômicos, ou seja, a tabela não deve conter grupos repetidos e nem atributos com mais de um valor. Para deixar nesta forma normal, é preciso identificar a chave primária da tabela, identificar a(s) coluna(s) que tem(êm) dados repetidos e removê-la(s), criar uma nova tabela com a chave primária para armazenar o dado repetido e, por fim, criar uma relação entre a tabela principal e a tabela secundária. Por exemplo, considere a tabela Pessoas a seguir.
PESSOAS= {ID+ NOME + ENDERECO + TELEFONES}
Ela contém a chave primária ID e o atributo TELEFONES é um atributo multivalorado e, portanto, a tabela não está na 1FN. Para deixá-la na 1FN, vamos criar uma nova tabela chamada TELEFONES que conterá PESSOA_ID como chave estrangeira de PESSOAS e TELEFONE como o valor multivalorado que será armazenado.
PESSOAS = { ID + NOME + ENDERECO }
TELEFONES = { PESSOA_ID + TELEFONE }
2FN - 2ª Forma Normal: inicialmente, para estar na 2FN é preciso estar na 1FN. Além disso, todos os atributos não chaves da tabela devem depender unicamente da chave primária (não podendo depender apenas de parte dela). Para deixar na segunda forma normal, é preciso identificar as colunas que não são funcionalmente dependentes da chave primária da tabela e, em seguida, remover essa coluna da tabela principal e criar uma nova tabela com esses dados. Por exemplo, considere a tabela ALUNOS_CURSOS a seguir.
ALUNOS_CURSOS = { ID_ALUNO + ID_CURSO + NOTA + DESCRICAO_CURSO }
Nessa tabela, o atributo DESCRICAO_CURSO depende apenas da chave primária ID_CURSO. Dessa forma, a tabela não está na 2FN. Para tanto, cria-se uma nova tabela chamada CURSOS que tem como chave primária ID_CURSO e atributo DESCRICAO retirando, assim, o atributo DESCRICAO_CURSO da tabela ALUNOS_CURSOS.
ALUNOS_CURSOS = {ID_ALUNO + ID_CURSO + NOTA}
CURSOS = {ID_CURSO + DESCRICAO}
I3FN - 3ª Forma Normal: para estar na 3FN, é preciso estar na 2FN. Além disso, os atributos não chaves de uma tabela devem ser mutuamente independentes e dependentes unicamente e exclusivamente da chave primária (um atributo B é funcionalmente dependente de A se, e somente se, para cada valor de A só existe um valor de B). Para atingir essa forma normal, é preciso identificar as colunas que são funcionalmente dependentes das outras colunas não chave e extraí-las para outra tabela. Considere, como exemplo, a tabela FUNCIONARIOS a seguir.
FUNCIONARIOS = { ID + NOME + ID_CARGO + DESCRICAO_CARGO }
O atributo DESCRICAO_CARGO depende exclusivamente de ID_CARGO (atributo não chave) e, portanto, deve-se criar uma nova tabela com esses atributos. Dessa forma, ficamos com as seguintes tabelas:
FUNCIONARIOS = { ID + NOME + ID_CARGO }
= { ID_CARGO + DESCRICAO }
(Normalização de Bancos de Dados Relacionais em:<http://www.dsc.ufcg.edu.br/~pet/jornal/maio2011/materias/recapitulando.html> Acesso em 18 de maio de 2019)
Com as tabelas normalizadas se inicia o sistema de gerenciamento de banco de dados (SGBD), o bando escolhido foi o MYSQL
MYSQL
O MySQL é um SGBD, um Sistema de gerenciamento de banco de dados, que usa a linguagem SQL como interface.
Este banco de dados é conhecido por sua facilidade de uso.Sua interface simples, e também sua capacidade de rodar em vários sistemas operacionais, são alguns dos motivos para este programa ser tão usado atualmente, e seu uso estar crescendo cada vez mais
O MySql está em constante desenvolvimento. Embora seja um dos bancos de dados mais utilizados no mundo, ainda se encontram alguns bugs.
Algumas das vantagens do Mysql em relação a outros bancos de dados do mesmo porte: tem uma facilidade maior para programação, tem funções mais simples, pode ser totalmente modificado, entre outras.
Por ter código aberto, facilita sua edição para as necessidades do usuário (desde que este saiba programar bem).
Quando é criada uma tabela, deve-se escolher o tipo de tabela que será criada. O mais utilizado, e padrão, é MyISAM.
As definições de coluna e tabela são guardadas em um arquivo .frm, criado pelo Mysql. Os índices e dados das tabelas também são armazenados em arquivos separados, dependendo do tipo de tabela.
Estas são algumas das funções de tabela do mysql. Muito mais simples que a maioria dos bancos de dados, porem é mais incompleta em alguns pontos.
(MYSQL em:<https://www.infoescola.com/informatica/mysql/> acesso em 22 de maio de 2019)
Já com o Sistema gerenciador de banco de dados pronto, o Java entra em ação com sua orientação objeto 
JAVA
Linguagem simples, orientada a objetos, distribuída, interpretada, potente, segura, de arquitetura neutra, portável, de alto desempenho, multiencadeada e dinâmica. Simples e concisa, semelhança com ao C++, facilidade no seu aprendizado e orientada a objetos.
Concentra-se em: dividir dados como objetos e métodos aplicados aos objetos, não suporte herança múltipla, pois permite que uma classe herde de apenas uma outra classe em determinado momento. Com isso ela evita problemas de classes que possuem comportamento contraditórios ou mutuamente excludentes. Pode implementar herança múltipla pelo uso de métodos para interfaces em classes abstratas.
Aplicativos acessam objetos via URL com a mesma facilidade que acessariam um sistema de arquivos locais, Interpretada e compilada e 20% do código Java é interpretado, o que traz segurança e a possibilidade de se trabalhar com várias plataformas.
Processo de compilação: o compilador transforma a fonte em bytecode (instruções compreendidas pela máquina virtual Java), a máquina virtual Java – JVM é um interpretador que transforma instruções em linguagem de máquina. (escrever uma vez e executar em qualquer lugar).
Autor Pacheco,  Gabriel (2014)resumo sobre Java, em <https://tiparaconcursos.wordpress.com/2014/09/12/resumo-sobre-java/> acesso em 24 de maio de 2019
 Já com o Java em andamento utilizamos também uma API gráfica chamada (JFREECHART) onde os gráficos foram gerados na seguinte forma, foi feito um levantamento dos municípios no banco de dados em uma listbox e depois cruzar 5 municípios puxando os valores do banco e carregando um datset
JFreeChart
O JFreeChart é uma biblioteca de gráficos Java que tomar fácil para os desenvolvedores exibirem gráficos de qualidade profissionais em seus aplicativos. O extenso conjunto de recurso do JFreeChart inclui 
Uma API consistente bem documentada, suportando uma ampla variedade de tipos de gráficos;
Um design flexível que é fácil de estender e direciona os aplicativos do lado do servidor e do lado do cliente;
Suporte para muitos tipos de saída incluído cotonetes Swing e Java, arquivos de imagem(png e JPEg) e formatos de arquivos gráficos vetoriais(incluindo PDF,EPS e SVG) JFreeChart é open source ou, mais especificamente, software livre. Ele é distribuído sobre os termos da licença publica geral GNU(LGPL), que permite o uso do aplicativos proprietários. 
(Welcome To JFreeChart!em:< http://www.jfree.org/jfreechart/> acesso em 30 de maio de 2019).
 Com o ensinamento obtido em sala de aula foi possivel realizar esse projeto no qual tem como objetivo alertar a população que aquela área a qual a pessoa está ou futuramente vai estar passa por uma alta ou baixa infestação de dengue naquele local, e assim também alertando os responsáveis da cidade que lá por algum motivo, seja por falta de fiscalização ou divulgação por parte dos governantes na base de conscientizar uma população mais inteirada sobre o assunto e o risco que lava por não fazer a sua parte nessa batalha contra o mosquito .
Desenvolvimento 
A procura de desenvolver um sistema de banco de dados de doenças epidemiológicas, optamos pela dengue, devido à grande quantidade de casos que vem crescendo nos últimos anos e por trata-se de um tema bastante falado nos últimos tempos.
 A procura de dados para esse sistema encontramos uma quantidade vastas de informações atualizadas no site do ministério da saúde, onde realizamos uma grande filtragem nas escolhas dos dados para preparar cada insert do bando de dados. Cada dado separado é dividido em seus devidos campos, sendo eles, em anos, meses, semanas, estado, município, doença e estatística.
Com os dados bem classificados, a próxima etapa foi elaborar o modelo conceitual, captura-se os seus requisitos de informação e as suas regras, dando origem aos chamados diagramas de entidade e relacionamento, aplicando a primeira, segundo e terceira forma normal.
Primeira forma normal 
Segunda forma normal.
Terceira forma normalJá com o modelo logico pronto, normalizado na terceira forma normal e seus devidos relacionamento feitos, o próximo passo foi iniciar o modelo físico, o Sistema gerenciador de Banco de dados (SGBD), usando o MYSQL 8.2, após a confecção do modelo geramos o seguinte script para construção do banco de dados:
CREATE TABLE `Estados` (
`est_Id` int(4) NOT NULL AUTO_INCREMENT,
`est_Nome` varchar(100) NOT NULL,
PRIMARY KEY (`est_Id`) ,
UNIQUE INDEX `unique_est_Nome` (`est_Nome` ASC)
);
CREATE TABLE `Municipios` (
`mun_id` int(4) NOT NULL AUTO_INCREMENT,
`mun_Nome` varchar(200) NOT NULL,
`mun_fk_est_id` int(4) NOT NULL,
PRIMARY KEY (`mun_id`) ,
UNIQUE INDEX `unique_Mun_Est` (`mun_Nome` ASC, `mun_fk_est_id` ASC)
);
CREATE TABLE `Estatisticas` (
`ess_Id` int(4) NOT NULL AUTO_INCREMENT,
`ess_Quantidade` bigint(12) NOT NULL,
`ess_fk_doe_id` int(4) NOT NULL,
`ess_fk_id_Mes_Sem` int(2) NOT NULL,
`ess_fk_mun_id` int(4) NOT NULL,
PRIMARY KEY (`ess_Id`) ,
UNIQUE INDEX `unique_doe_sem_mun` (`ess_fk_doe_id` ASC, `ess_fk_id_Mes_Sem` ASC, `ess_fk_mun_id` ASC)
);
CREATE TABLE `Meses` (
`mes_id` int(2) NOT NULL AUTO_INCREMENT,
`mes_Nome` varchar(15) NOT NULL,
PRIMARY KEY (`mes_id`) ,
UNIQUE INDEX `unique_Mes_Nome` (`mes_Nome` ASC)
);
CREATE TABLE `Semanas` (
`sem_id` int(2) NOT NULL AUTO_INCREMENT,
`sem_posicao` int(2) NOT NULL,
`sem_fk_mes_id` int(2) NOT NULL,
`sem_fk_ano_id` int(2) NOT NULL,
PRIMARY KEY (`sem_id`) 
);
CREATE TABLE `Doencas` (
`doe_id` int(4) NOT NULL AUTO_INCREMENT,
`doe_Nome` varchar(200) NOT NULL,
PRIMARY KEY (`doe_id`) ,
UNIQUE INDEX `unique_doe_Nome` (`doe_Nome` ASC)
);
CREATE TABLE `Anos` (
`ano_id` int(2) NOT NULL AUTO_INCREMENT,
`ano_numero` int(4) NOT NULL,
PRIMARY KEY (`ano_id`) 
);
ALTER TABLE `Municipios` ADD CONSTRAINT `mun_fk_est_id` FOREIGN KEY (`mun_fk_est_id`) REFERENCES `Estados` (`est_Id`);
ALTER TABLE `Semanas` ADD CONSTRAINT `fk_id_mes` FOREIGN KEY (`sem_fk_mes_id`) REFERENCES `Meses` (`mes_id`);
ALTER TABLE `Estatisticas` ADD CONSTRAINT `fk_Mes_Sem` FOREIGN KEY (`ess_fk_id_Mes_Sem`) REFERENCES `Semanas` (`sem_id`);
ALTER TABLE `Estatisticas` ADD CONSTRAINT `fk_Doe_id` FOREIGN KEY (`ess_fk_doe_id`) REFERENCES `Doencas` (`doe_id`);
ALTER TABLE `Estatisticas` ADD CONSTRAINT `fk_Mun_id` FOREIGN KEY (`ess_fk_mun_id`) REFERENCES `Municipios` (`mun_id`);
ALTER TABLE `Semanas` ADD CONSTRAINT `fk_id_ano` FOREIGN KEY (`sem_fk_ano_id`) REFERENCES `Anos` (`ano_id`);
Aqui são detalhados os componentes da estrutura física do banco, como tabelas, campos, tipos de valores, etc.
Entrada de meses 
Entradas de semanas
Estado
 
Doenças
Municípios 
Estatísticas 
Resultados e Discussões
 Tela Inicial do Programa, pode selecionar até 5 cidades que ao apertar no botão carregar será exibido o gráfico comparativo. Foram feitas duas comparações cidades do grande ABCD e Capital e algumas cidades do interior.
	
 O programa foi construído com duas classes senda a primeira classe chamada Conexao.java, abaixo o código:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
public class Conexao {
 public Conexao() {
 } //Possibilita instancias
 public static Connection con = null;
 public static Connection Conectar() {
 System.out.println("Conectando ao banco...");
 try {
 Class.forName("com.mysql.cj.jdbc.Driver");
 con = DriverManager.getConnection("jdbc:mysql://localhost:3306/apsunip?serverTimezone=UTC", "root", "xxxxxxx");
 return con;
 //System.out.println("Conectado.");
 } catch (ClassNotFoundException ex) {
 System.out.println("Classe não encontrada, adicione o driver nas bibliotecas.");
 Logger.getLogger(Conexao.class.getName()).log(Level.SEVERE, null, ex);
 } catch (SQLException e) {
 System.out.println(e);
 throw new RuntimeException(e);
 }
 return null;
 }
}
A segunda classe foi chamada FrmPrincipal.java, é nela que iniciamos o programa e a lógica para construção do gráfico, abaixo segue o código.
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.io.File;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.RectangleInsets;
public class FrmPrincipal extends javax.swing.JFrame {
 public FrmPrincipal() {
 initComponents();
 CarregarMunicipios();
 }
 @SuppressWarnings("unchecked")
 // <editor-fold defaultstate="collapsed" desc="Generated Code"> 
 private void initComponents() {
 jScrollPane1 = new javax.swing.JScrollPane();
 jList1 = new javax.swing.JList();
 jLabel1 = new javax.swing.JLabel();
 jButton1 = new javax.swing.JButton();
 setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
 jScrollPane1.setViewportView(jList1);
 jLabel1.setText("Pressione Ctrl para marcar até 5 cidades");
 jButton1.setText("Carregar");
 jButton1.addActionListener(new java.awt.event.ActionListener() {
 public void actionPerformed(java.awt.event.ActionEvent evt) {
 jButton1ActionPerformed(evt);
 }
 });
 javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
 getContentPane().setLayout(layout);
 layout.setHorizontalGroup(
 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 .addGroup(layout.createSequentialGroup()
 .addContainerGap()
 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 .addComponent(jScrollPane1)
 .addGroup(layout.createSequentialGroup()
 .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 242, javax.swing.GroupLayout.PREFERRED_SIZE)
 .addGap(11, 11, 11)
 .addComponent(jButton1)
 .addGap(0, 35, Short.MAX_VALUE)))
 .addContainerGap())
 );
 layout.setVerticalGroup(
 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 .addGroup(layout.createSequentialGroup()
 .addContainerGap()
 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
 .addComponent(jLabel1)
 .addComponent(jButton1))
 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 412, Short.MAX_VALUE)
 .addContainerGap())
 );
 pack();
 }// </editor-fold> 
 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 
 List lista = jList1.getSelectedValuesList();
 JPanelpainel = new JPanel();
 painel = createChartPanel(lista);
 painel.setVisible(true);
 JFrame janela = new JFrame("Gráfico");
 janela.add(painel);
 janela.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
 janela.pack();
 janela.setVisible(true);
 } 
 /**
 * @param args the command line arguments
 */
 public static void main(String args[]) {
 try {
 for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
 if ("Nimbus".equals(info.getName())) {
 javax.swing.UIManager.setLookAndFeel(info.getClassName());
 break;
 }
 }
 } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | javax.swing.UnsupportedLookAndFeelException ex) {
 java.util.logging.Logger.getLogger(FrmPrincipal.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
 }
 java.awt.EventQueue.invokeLater(new Runnable() {
 public void run() {
 new FrmPrincipal().setVisible(true);
 }
 });
 }
 // Variables declaration - do not modify 
 private javax.swing.JButton jButton1;
 private javax.swing.JLabel jLabel1;
 private javax.swing.JList jList1;
 private javax.swing.JScrollPane jScrollPane1;
 // End of variables declaration 
 private void CarregarMunicipios() {
 try {
 Connection conn = Conexao.Conectar();
 String query = "SELECT mun_Nome FROM municipios;";
 // create the java statement
 Statement st = conn.createStatement();
 // execute the query, and get a java resultset
 ResultSet rs = st.executeQuery(query);
 List strings = new ArrayList();
 while (rs.next()) {
 strings.add(rs.getString("mun_Nome"));
 }
 DefaultListModel listModel = new DefaultListModel();
 for (Object item : strings) {
 listModel.addElement(item);
 }
 this.jList1.setModel(listModel);
 } catch (SQLException e) {
 e.printStackTrace();
 }
 }
 public JPanel createChartPanel(List lista) {
 String chartTitle = "Gráfico Dengue";
 String categoryAxisLabel = "Semanas";
 String valueAxisLabel = "Quantidades";
 CategoryDataset dataset = createDataset(lista);
 JFreeChart chart = ChartFactory.createLineChart(chartTitle,
 categoryAxisLabel, valueAxisLabel, dataset);
 customizeChart(chart);
 File imageFile = new File("LineChart.png");
 int width = 640 * 2;
 int height = 480 * 2;
 try {
 ChartUtilities.saveChartAsPNG(imageFile, chart, width, height);
 } catch (IOException ex) {
 System.err.println(ex);
 }
 return new ChartPanel(chart);
 }
 private CategoryDataset createDataset(List lista) {
 DefaultCategoryDataset dataset = new DefaultCategoryDataset();
 try {
 Connection conn = Conexao.Conectar();
 for (int i = 0; i < lista.size(); i++) {
 String query = "SELECT\n"
 + "	E.ess_Quantidade AS 'Quantidade',\n"
 + "	S.sem_posicao AS 'Semana',\n"
 + "	ME.mes_Nome AS 'Mês',\n"
 + "	AN.ano_numero AS 'Ano',\n"
 + "	M.mun_Nome AS 'Municipio',\n"
 + "	ES.est_Nome AS 'Estado' \n"
 + "FROM\n"
 + "	estatisticas AS E\n"
 + "	INNER JOIN doencas AS D ON E.ess_fk_doe_id = D.doe_id\n"
 + "	INNER JOIN semanas AS S ON E.ess_fk_id_Mes_Sem = S.sem_id\n"
 + "	INNER JOIN municipios AS M ON E.ess_fk_mun_id = M.mun_id\n"
 + "	INNER JOIN estados AS ES ON M.mun_fk_est_id = ES.est_Id\n"
 + "	INNER JOIN meses AS ME ON S.sem_fk_mes_id = ME.mes_id\n"
 + "	INNER JOIN anos AS AN ON S.sem_fk_ano_id = AN.ano_id\n"
 + "	WHERE m.mun_Nome = '" + lista.get(i).toString() + "'\n"
 + "ORDER BY\n"
 + "	AN.ano_numero,\n"
 + "	S.sem_posicao";
 Statement st = conn.createStatement();
 ResultSet rs = st.executeQuery(query);
 while (rs.next()) {
 int qtde = rs.getInt("Quantidade");
 String semana = rs.getString("Semana") + "-" + rs.getString("Ano");
 dataset.addValue(qtde, lista.get(i).toString(), semana);
 }
 st.close();
 }
 return dataset;
 } catch (Exception e) {
 System.err.println("Got an exception! ");
 System.err.println(e.getMessage());
 }
 return null;
 }
 private void customizeChart(JFreeChart chart) {
 CategoryPlot plot = chart.getCategoryPlot();
 LineAndShapeRenderer renderer = new LineAndShapeRenderer();
 renderer.setSeriesPaint(0, Color.RED);
 renderer.setSeriesPaint(1, Color.GREEN);
 renderer.setSeriesPaint(2, Color.BLUE);
 renderer.setSeriesPaint(3, Color.YELLOW);
 renderer.setSeriesPaint(4, Color.ORANGE);
 renderer.setSeriesStroke(0, new BasicStroke(2.5f));
 renderer.setSeriesStroke(1, new BasicStroke(2.0f));
 renderer.setSeriesStroke(2, new BasicStroke(1.5f));
 renderer.setSeriesStroke(3, new BasicStroke(1.0f));
 renderer.setSeriesStroke(4, new BasicStroke(0.5f));
 
 plot.setOutlinePaint(Color.BLUE);
 plot.setOutlineStroke(new BasicStroke(1.0f));
 
 plot.setRenderer(renderer);
 
 plot.setBackgroundPaint(Color.LIGHT_GRAY);
 plot.setRangeGridlinesVisible(true);
 plot.setRangeGridlinePaint(Color.BLACK);
 plot.setDomainGridlinesVisible(true);
 plot.setDomainGridlinePaint(Color.BLACK);
 plot.setAxisOffset(new RectangleInsets(0, 0, 0, 0));
 CategoryAxis axis = plot.getDomainAxis();
 axis.setLowerMargin(0.0005);
 axis.setUpperMargin(0.0005);
 axis.setCategoryMargin(0.0005);
 renderer.setItemMargin(0.0005);
 axis.setCategoryLabelPositions(CategoryLabelPositions.UP_90);
 Font font3 = new Font("Dialog", Font.PLAIN, 10);
 plot.getDomainAxis().setTickLabelFont(font3);
 plot.getRangeAxis().setTickLabelFont(font3);
 }
}
Considerações Finais
 Identificamos que um banco de dados é um conjunto de dados. Sob esse ponto de vista, uma planilha com uma lista de clientes ou o caderno que o dono do mercadinho da esquina mantém para saber quem está devendo podem ser tratados como bancos de dados. No banco de dados deve reunir informações de maneira organizada, consistente, protegida e acessível em tempo hábil. 
Com um banco de dados conseguimos colocar dados à disposição de usuários para uma consulta, uma atualização, assegurando-se dos direitos adquiridos aos mesmos. Isso é ainda mais útil quando os dados informáticos são numerosos. Um banco de dados pode ser local, utilizável em um dispositivo por um usuário, ou repartido, isto é, quando as informações são armazenadas em dispositivos remotos e acessíveis pela rede. A grande vantagem do uso dos bancos de dados é a possibilidade de poderem ser acessados por vários usuários ao mesmo tempo.
O banco de dados dentro dos sistemas de informação em saúde de uma maneira geral deve sempre contribuir para a melhoriada qualidade bem como da eficácia e eficiência do atendimento a saúde, proporcionando aos profissionais de saúde a oportunidade da realização de pesquisas, com a intenção de oferecer evidências e auxílio no processo de ensino. Um banco de dados deve servir para gerenciar as informações que os profissionais de saúde necessitam para desempenhar suas atividades da melhor maneira possível sendo eficazes e eficientes. Facilitar a comunicação, integrar as informações entre as equipes, ou em uma equipe de saúde, fornecendo recursos e também apoio financeiro.
Referência Bibliográficas
https://www.faeterj-rio.edu.br/downloads/bbv/0031.pdf
https://blog.fastformat.co/referencias-bibliograficas-abnt-exemplos-e-formatos/
http://aprendaplsql.com/modelagem-de-dados/normalizacao-banco-de-dados/
http://www.dsc.ufcg.edu.br/~pet/jornal/maio2011/materias/recapitulando.html
https://tiparaconcursos.wordpress.com/2014/09/12/resumo-sobre-java/
http://redehumanizasus.net/90052-a-importancia-dos-sistemas-de-informacao-em-saude/
https://saudebusiness.com/canal-mv/mv-hospitais/a-importancia-dos-dados-dos-clientes-para-hospitais-e-clinicas/
https://saudebusiness.com/canal-mv/mv-hospitais/a-importancia-dos-dados-dos-clientes-para-hospitais-e-clinicas/
https://saudebusiness.com/canal-mv/mv-hospitais/a-importancia-dos-dados-dos-clientes-para-hospitais-e-clinicas/
http://www.saude.sp.gov.br/cve-centro-de-vigilancia-epidemiologica-prof.-alexandre-vranjac/areas-de-vigilancia/doencas-de-transmissao-por-vetores-e-zoonoses/agravos/febre-amarela/boletim-epidemiologico
https://meunegocio.uol.com.br/academia/tecnologia/qual-a-diferenca-entre-mysql-e-sql-server.html
https://pt.m.wikipedia.org/wiki/MySQL
https://www.oracle.com/br/mysql/
http://aprendaplsql.com/modelagem-de-dados/normalizacao-banco-de-dados/
http://www.dsc.ufcg.edu.br/~pet/jornal/maio2011/materias/recapitulando.html
http://www.jfree.org/jfreechart/
https://www.devmedia.com.br/entendendo-e-aplicando-heranca-em-java/24544
http://www.tiexpert.net/programacao/java/heranca.php
https://www.devmedia.com.br/conceitos-classes-abstratas-programacao-orientada-a-objetos/18812
https://pt.stackoverflow.com/questions/87423/o-que-%C3%A9-e-para-que-serve-uma-classe-abstrata
https://www.devmedia.com.br/uso-de-polimorfismo-em-java/26140
https://www.devmedia.com.br/sql-join-entenda-como-funciona-o-retorno-dos-dados/31006
Código Fonte
MySQL
CREATE TABLE `Estados` (
`est_Id` int(4) NOT NULL AUTO_INCREMENT,
`est_Nome` varchar(100) NOT NULL,
PRIMARY KEY (`est_Id`) ,
UNIQUE INDEX `unique_est_Nome` (`est_Nome` ASC)
);
CREATE TABLE `Municipios` (
`mun_id` int(4) NOT NULL AUTO_INCREMENT,
`mun_Nome` varchar(200) NOT NULL,
`mun_fk_est_id` int(4) NOT NULL,
PRIMARY KEY (`mun_id`) ,
UNIQUE INDEX `unique_Mun_Est` (`mun_Nome` ASC, `mun_fk_est_id` ASC)
);
CREATE TABLE `Estatisticas` (
`ess_Id` int(4) NOT NULL AUTO_INCREMENT,
`ess_Quantidade` bigint(12) NOT NULL,
`ess_fk_doe_id` int(4) NOT NULL,
`ess_fk_id_Mes_Sem` int(2) NOT NULL,
`ess_fk_mun_id` int(4) NOT NULL,
PRIMARY KEY (`ess_Id`) ,
UNIQUE INDEX `unique_doe_sem_mun` (`ess_fk_doe_id` ASC, `ess_fk_id_Mes_Sem` ASC, `ess_fk_mun_id` ASC)
);
CREATE TABLE `Meses` (
`mes_id` int(2) NOT NULL AUTO_INCREMENT,
`mes_Nome` varchar(15) NOT NULL,
PRIMARY KEY (`mes_id`) ,
UNIQUE INDEX `unique_Mes_Nome` (`mes_Nome` ASC)
);
CREATE TABLE `Semanas` (
`sem_id` int(2) NOT NULL AUTO_INCREMENT,
`sem_posicao` int(2) NOT NULL,
`sem_fk_mes_id` int(2) NOT NULL,
`sem_fk_ano_id` int(2) NOT NULL,
PRIMARY KEY (`sem_id`) 
);
CREATE TABLE `Doencas` (
`doe_id` int(4) NOT NULL AUTO_INCREMENT,
`doe_Nome` varchar(200) NOT NULL,
PRIMARY KEY (`doe_id`) ,
UNIQUE INDEX `unique_doe_Nome` (`doe_Nome` ASC)
);
CREATE TABLE `Anos` (
`ano_id` int(2) NOT NULL AUTO_INCREMENT,
`ano_numero` int(4) NOT NULL,
PRIMARY KEY (`ano_id`) 
);
ALTER TABLE `Municipios` ADD CONSTRAINT `mun_fk_est_id` FOREIGN KEY (`mun_fk_est_id`) REFERENCES `Estados` (`est_Id`);
ALTER TABLE `Semanas` ADD CONSTRAINT `fk_id_mes` FOREIGN KEY (`sem_fk_mes_id`) REFERENCES `Meses` (`mes_id`);
ALTER TABLE `Estatisticas` ADD CONSTRAINT `fk_Mes_Sem` FOREIGN KEY (`ess_fk_id_Mes_Sem`) REFERENCES `Semanas` (`sem_id`);
ALTER TABLE `Estatisticas` ADD CONSTRAINT `fk_Doe_id` FOREIGN KEY (`ess_fk_doe_id`) REFERENCES `Doencas` (`doe_id`);
ALTER TABLE `Estatisticas` ADD CONSTRAINT `fk_Mun_id` FOREIGN KEY (`ess_fk_mun_id`) REFERENCES `Municipios` (`mun_id`);
ALTER TABLE `Semanas` ADD CONSTRAINT `fk_id_ano` FOREIGN KEY (`sem_fk_ano_id`) REFERENCES `Anos` (`ano_id`);
JAVA Conexão com banco de dados
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
public class Conexao {
 public Conexao() {
 } //Possibilita instancias
 public static Connection con = null;
 public static Connection Conectar() {
 System.out.println("Conectando ao banco...");
 try {
 Class.forName("com.mysql.cj.jdbc.Driver");
 con = DriverManager.getConnection("jdbc:mysql://localhost:3306/apsunip?serverTimezone=UTC", "root", "xxxxxxx");
 return con;
 //System.out.println("Conectado.");
 } catch (ClassNotFoundException ex) {
 System.out.println("Classe não encontrada, adicione o driver nas bibliotecas.");
 Logger.getLogger(Conexao.class.getName()).log(Level.SEVERE, null, ex);
 } catch (SQLException e) {
 System.out.println(e);
 throw new RuntimeException(e);
 }
 return null;
 }
}
JAVA Principal e Gráficos
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.io.File;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.RectangleInsets;
public class FrmPrincipal extends javax.swing.JFrame {
 public FrmPrincipal() {
 initComponents();
 CarregarMunicipios();
 }
 @SuppressWarnings("unchecked")
 // <editor-fold defaultstate="collapsed" desc="Generated Code"> 
 private void initComponents() {
 jScrollPane1 = new javax.swing.JScrollPane();
 jList1 = new javax.swing.JList();
 jLabel1 = new javax.swing.JLabel();
 jButton1 = new javax.swing.JButton();
 setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
 jScrollPane1.setViewportView(jList1);
 jLabel1.setText("Pressione Ctrl para marcar até 5 cidades");
 jButton1.setText("Carregar");
 jButton1.addActionListener(new java.awt.event.ActionListener() {
 public void actionPerformed(java.awt.event.ActionEvent evt) {
 jButton1ActionPerformed(evt);
 }
 });
 javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
 getContentPane().setLayout(layout);
 layout.setHorizontalGroup(
 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 .addGroup(layout.createSequentialGroup()
 .addContainerGap()
 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(jScrollPane1)
 .addGroup(layout.createSequentialGroup()
 .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 242, javax.swing.GroupLayout.PREFERRED_SIZE)
 .addGap(11, 11, 11)
 .addComponent(jButton1)
 .addGap(0, 35, Short.MAX_VALUE)))
 .addContainerGap())
 );
 layout.setVerticalGroup(
 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 .addGroup(layout.createSequentialGroup()
 .addContainerGap()
 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
 .addComponent(jLabel1)
 .addComponent(jButton1))
 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 412, Short.MAX_VALUE)
 .addContainerGap())
 );
 pack();
 }// </editor-fold> 
 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 
 List lista = jList1.getSelectedValuesList();
 JPanel painel = new JPanel();
 painel = createChartPanel(lista);
 painel.setVisible(true);
 JFrame janela = new JFrame("Gráfico");
 janela.add(painel);
 janela.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
 janela.pack();
 janela.setVisible(true);
 } 
 /**
 * @param args the command line arguments
 */
 public static void main(String args[]) {
 try {
 for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
 if ("Nimbus".equals(info.getName())) {
 javax.swing.UIManager.setLookAndFeel(info.getClassName());
 break;
 }
 }
 } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | javax.swing.UnsupportedLookAndFeelException ex) {
 java.util.logging.Logger.getLogger(FrmPrincipal.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
 }
 java.awt.EventQueue.invokeLater(new Runnable() {
 public void run() {
 new FrmPrincipal().setVisible(true);
 }
 });
 }
 // Variables declaration - do not modify 
 private javax.swing.JButton jButton1;
 private javax.swing.JLabel jLabel1;
 private javax.swing.JList jList1;
 private javax.swing.JScrollPane jScrollPane1;
 // End of variables declaration 
 private void CarregarMunicipios() {
 try {
 Connection conn = Conexao.Conectar();
 String query = "SELECT mun_Nome FROM municipios;";
 // create the java statement
 Statement st = conn.createStatement();
 // execute the query, and get a java resultset
 ResultSet rs = st.executeQuery(query);
 List strings = new ArrayList();
 while (rs.next()) {
 strings.add(rs.getString("mun_Nome"));
 }
 DefaultListModel listModel = new DefaultListModel();
 for (Object item : strings) {
 listModel.addElement(item);
 }
 this.jList1.setModel(listModel);
 } catch (SQLException e) {
 e.printStackTrace();
 }
 }
 public JPanel createChartPanel(List lista) {
 String chartTitle = "Gráfico Dengue";
 String categoryAxisLabel = "Semanas";
 String valueAxisLabel = "Quantidades";
 CategoryDataset dataset = createDataset(lista);
 JFreeChart chart = ChartFactory.createLineChart(chartTitle,
 categoryAxisLabel, valueAxisLabel, dataset);
 customizeChart(chart);
 File imageFile = new File("LineChart.png");
 int width = 640 * 2;
 int height = 480 * 2;
 try {
 ChartUtilities.saveChartAsPNG(imageFile, chart, width, height);
 } catch (IOException ex) {
 System.err.println(ex);
 }
 return new ChartPanel(chart);
 }
 private CategoryDataset createDataset(List lista) {
 DefaultCategoryDataset dataset = new DefaultCategoryDataset();
 try {
 Connection conn = Conexao.Conectar();
 for (int i = 0; i < lista.size(); i++) {
 String query = "SELECT\n"
 + "	E.ess_Quantidade AS 'Quantidade',\n"
 + "	S.sem_posicao AS 'Semana',\n"
 + "	ME.mes_Nome AS 'Mês',\n"
 + "	AN.ano_numero AS 'Ano',\n"
 + "	M.mun_Nome AS 'Municipio',\n"
 + "	ES.est_Nome AS 'Estado' \n"
 + "FROM\n"
 + "	estatisticas AS E\n"
 + "	INNER JOIN doencas AS D ON E.ess_fk_doe_id = D.doe_id\n"
 + "	INNER JOIN semanas AS S ON E.ess_fk_id_Mes_Sem = S.sem_id\n"
 + "	INNER JOIN municipios AS M ON E.ess_fk_mun_id = M.mun_id\n"
 + "	INNER JOIN estados AS ES ON M.mun_fk_est_id = ES.est_Id\n"
 + "	INNER JOIN meses AS ME ON S.sem_fk_mes_id = ME.mes_id\n"
 + "	INNER JOIN anos AS AN ON S.sem_fk_ano_id = AN.ano_id\n"
 + "	WHERE m.mun_Nome = '" + lista.get(i).toString() + "'\n"
 + "ORDER BY\n"
 + "	AN.ano_numero,\n"
 + "	S.sem_posicao";
 Statement st = conn.createStatement();
 ResultSet rs = st.executeQuery(query);
 while (rs.next()) {
 int qtde = rs.getInt("Quantidade");
 String semana = rs.getString("Semana") + "-" + rs.getString("Ano");
 dataset.addValue(qtde, lista.get(i).toString(), semana);
 }
 st.close();
 }
 return dataset;
 } catch (Exception e) {
 System.err.println("Got an exception! ");
 System.err.println(e.getMessage());
 }
 return null;
 }
 private void customizeChart(JFreeChart chart) {
 CategoryPlot plot = chart.getCategoryPlot();
 LineAndShapeRenderer renderer = new LineAndShapeRenderer();
 renderer.setSeriesPaint(0, Color.RED);
 renderer.setSeriesPaint(1, Color.GREEN);
 renderer.setSeriesPaint(2, Color.BLUE);
 renderer.setSeriesPaint(3, Color.YELLOW);
 renderer.setSeriesPaint(4, Color.ORANGE);
 renderer.setSeriesStroke(0, new BasicStroke(2.5f));
 renderer.setSeriesStroke(1, new BasicStroke(2.0f));
 renderer.setSeriesStroke(2, new BasicStroke(1.5f));
 renderer.setSeriesStroke(3, new BasicStroke(1.0f));
 renderer.setSeriesStroke(4, new BasicStroke(0.5f));
 
 plot.setOutlinePaint(Color.BLUE);
 plot.setOutlineStroke(new BasicStroke(1.0f));
 
 plot.setRenderer(renderer);
 
 plot.setBackgroundPaint(Color.LIGHT_GRAY);
 plot.setRangeGridlinesVisible(true);
 plot.setRangeGridlinePaint(Color.BLACK);
 plot.setDomainGridlinesVisible(true);
 plot.setDomainGridlinePaint(Color.BLACK);
 plot.setAxisOffset(new RectangleInsets(0, 0, 0, 0));
 CategoryAxis axis = plot.getDomainAxis();
 axis.setLowerMargin(0.0005);
 axis.setUpperMargin(0.0005);
 axis.setCategoryMargin(0.0005);
 renderer.setItemMargin(0.0005);axis.setCategoryLabelPositions(CategoryLabelPositions.UP_90);
 Font font3 = new Font("Dialog", Font.PLAIN, 10);
 plot.getDomainAxis().setTickLabelFont(font3);
 plot.getRangeAxis().setTickLabelFont(font3);
 }
}

Continue navegando