Bonjour,

J'ai un petit problème d’association entre JFreechart et Mysql.

J'ai une requête SQL qui permet d'avoir des valeurs enregistrées pour les dernières 24h, ces valeurs seront utilisées dans une servlet Java afin de tracer une courbe en fonction du temps .

Ma table (table1) est constitué de trois colonne :
  • date de type DATE
  • heure de type TIME
  • valeur de type float.

Ci-dessous la requête utilisés :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
select heure, valeur from table1
WHERE
  STR_TO_DATE(CONCAT(`date`, ' ', heure), '%Y-%m-%d %H:%i:%s')
  BETWEEN DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 24 HOUR)
  AND CURRENT_TIMESTAMP;");
et voici le code source de ma servlet :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
package metier;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Enumeration;
 
import javax.imageio.ImageIO;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
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.DateAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.time.Hour;
import org.jfree.data.time.Minute;
import org.jfree.data.time.Second;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.ui.RectangleInsets;
 
import com.sun.corba.se.impl.orbutil.graph.Graph;
 
import marouene.TimeSeriesDemoTest;
import marouene.compare;
 
 
public class httpcompare extends HttpServlet {
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException, SQLException {
         connexionBD con = new connexionBD();
        response.setContentType("image/png");
 
            ResultSet rs1 = con.execute("select heure,valeur from table1 WHERE STR_TO_DATE(CONCAT(`date`, ' ', heure), '%Y-%m-%d %H:%i:%s') BETWEEN DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 24 HOUR) AND CURRENT_TIMESTAMP;");
            final TimeSeries series1 = new TimeSeries("valeur", Hour.class);
            while(rs1.next()){
 
                java.sql.Time v1;
 
                    v1 = rs1.getTime("heure");
 
                 double v2=rs1.getFloat("valeur");
 
                 series1.addOrUpdate( new Minute(v1), v2);
 
             }   
        DateAxis domain = new DateAxis("Time");
            NumberAxis range = new NumberAxis("Débit en Kb/s");
        final TimeSeriesCollection dataset = new TimeSeriesCollection(series1);
 
        dataset.setDomainIsPointsInTime(true);
        XYItemRenderer renderer = new XYLineAndShapeRenderer(true, false);
        XYPlot plot = new XYPlot(dataset, domain, range, renderer);
        plot.setBackgroundPaint(Color.lightGray);
        plot.setDomainGridlinePaint(Color.white);
        plot.setRangeGridlinePaint(Color.white);
        plot.setAxisOffset(new RectangleInsets(5.0, 5.0, 5.0, 5.0));
        range.setAutoRange(true);
        range.setLowerMargin(0.0);
        range.setUpperMargin(0.0);
        range.setTickLabelsVisible(true);
        range.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
        JFreeChart chart = new JFreeChart(plot);
 
        XYItemRenderer r = plot.getRenderer();
        if (r instanceof XYLineAndShapeRenderer) {
            XYLineAndShapeRenderer renderer1 = (XYLineAndShapeRenderer) r;
            renderer1.setBaseShapesVisible(true);
            renderer1.setBaseShapesFilled(true);
        }
        chart.setTitle(new TextTitle("Comparaison du débit Http"));
 
        final ChartPanel chartPanel = new ChartPanel(chart);
        chartPanel.setPreferredSize(new java.awt.Dimension(600, 300));
        chartPanel.setMouseZoomable(true, false);
 
        OutputStream out = response.getOutputStream();
        ChartUtilities.writeChartAsPNG(out, chart, 700, 500);   
          request.setAttribute("image",out);
    }        
 
     protected void doGet(HttpServletRequest request, HttpServletResponse response)
     throws ServletException, IOException {
 try {
    processRequest(request, response);
} catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
}
}
Jusque la tout devrait marcher, sauf que lors de l'affichage , dans l'axe du temps, au lieu d'avoir une axe dans l'intervalle [now, now -24h] , j'ai un affichage entre [00h, 00h] de la journée précédente, ce qui est quand même bizarre.. vue que ma requête me retourne juste les valeurs enregistrées pendant les dernières 24h.

Quelqu'un aurait une idée sur l'origine du problème ?

Merci beaucoup

personne n'a eu ce genre de problème ?