IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

2D Java Discussion :

[JFreeChart] afficher un graphe dans une page jsp


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 27
    Par défaut [JFreeChart] afficher un graphe dans une page jsp
    Bonjour à tous,

    je suis débutant en jsp et servlet.

    je travaille sur un projet qui permet tracer des graphes à partir des données stockés sur une base de donnée. je dois afficher dans le graphe , dans l'axe des X la date stocké dans la BDD, la date est de format : "2009-03-23 11:05:20" et dans l'axe des Y les valeurs correspondantes pour chaque date.

    si quelqu'un a un exemple de ce projet, merci de me le communiquer, car il y 1 mois que je galére sur le sujet.
    Pour l'instant ce que j'ai réussi à faire, c'est créer une classe en java qui permet tracer un graphe , mais le soucis que j'ai rencontré , c'est que j'arrive pas à afficher les dates dans l'axe des X .

    Voici le code de ma classe Java :
    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
    package test;
     
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
     
    import org.jfree.chart.ChartFactory;
    import org.jfree.chart.ChartFrame;
    import org.jfree.chart.JFreeChart;
    import org.jfree.chart.plot.PlotOrientation;
    import org.jfree.data.xy.XYDataset;
    import org.jfree.data.xy.XYSeries;
    import org.jfree.data.xy.XYSeriesCollection;
     
     
    public class LineChartTest{
     
    public static void main(String arg[]) throws NumberFormatException, SQLException, ClassNotFoundException{
     
     
    	String url = "jdbc:mysql://localhost:3306/test";
    	String username = "root";
    	String password = null ;
    	Class.forName("com.mysql.jdbc.Driver");
    	Connection con = DriverManager.getConnection(url,username,password);
    	Statement stmt = con.createStatement();
     
     
     
    		try{
        		Class.forName("com.mysql.jdbc.Driver");
        	}
        	catch (ClassNotFoundException e){
        		System.out.println("Pilote non retrouvé");
        	}
        	try{
        		con= DriverManager.getConnection(url,username,password);
        	}
        	catch(SQLException sqle){System.out.println("Erreur lors de la connexion à la base de données");
     
        	//destroy();
        	}
     
     
     
      XYSeries series = new XYSeries("Valeurs");
     
            try {
     
    	       con= DriverManager.getConnection(url,username,password);
    	       stmt = con.createStatement();
    	    }
    	    catch (SQLException sqle){System.out.println("Erreur de requete");}	
     
    	    ResultSet rs = (ResultSet) stmt.executeQuery("select * from CPUtest");	
     
    	    while(rs.next()){
     
    	    	double v1=rs.getDouble("datex");
    	    	double v2=rs.getDouble("sample");
    	    	series.add(v1,v2);
    	    }
    	    rs.close();
     
    	        /*
    	        series.add(rs.getString("datex"),rs1.getString("value1"));
    		    series.add(20.0, 20.0);
    	        series.add(40.0, 25.0);
    	        series.add(55.0, 50.0);
    	        series.add(70.0, 65.0);
    	        */
     
      XYDataset xyDataset = new XYSeriesCollection(series);
      JFreeChart chart = ChartFactory.createXYLineChart
              ("Moniteur CPU", "value1", "value2",
      xyDataset, PlotOrientation.VERTICAL, true, true, false);
      ChartFrame frame1=new ChartFrame("Moniteur CPU",chart);
      frame1.setVisible(true);
      frame1.setSize(700,400);
      }
    }
    l'erreur qui m'affiche :

    Exception in thread "main" java.sql.SQLException: Bad format for number '2009-03-23 10:16:33' in column 1.
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910)
    at com.mysql.jdbc.ResultSet.getDoubleInternal(ResultSet.java:2467)
    at com.mysql.jdbc.ResultSet.getDoubleInternal(ResultSet.java:2406)
    at com.mysql.jdbc.ResultSet.getDouble(ResultSet.java:2367)
    at com.mysql.jdbc.ResultSet.getDouble(ResultSet.java:2385)
    at test.LineChartTest.main(LineChartTest.java:61)
    le code marche bien pour autre champ que "Datex" (champ dans ma base de donnée qui correspond qu champ Date),(double v1=rs.getDouble("datex").



    et aprés je compte transformer cette classe en servlet pour que je puisse la exploité dans une page jsp.

    Merci de votre aide.

  2. #2
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Je suis loin d'être spécialiste en jdbc mais si ton champ est de type java.sql.Date, ne devrais-tu pas plutôt utiliser un rs.getDate("datex") ?

    Sinon, si tu veux afficher des dates sur l'axe des abscisses, tu devrais plutôt utiliser un TimeSeriesChart.

    Et pour afficher le graphe dans une jsp, tu peux t'inspirer du code donné dans cette discussion.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 27
    Par défaut
    Merci bcp pour ta réponse mais j'ai essayé de mettre rs.getDate("datex") et ça ne marche pas , il me demande de changer le type de rs.getDate("datex") en Double et au moment de : series.add(v1,v2), il prend pas le v1.

    t'aurais pas un exemple stp de coment utiliser un TimeSeriesChart.

  4. #4
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Voici un exemple extrait du jar de demo de JFreeChart :
    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
    import java.awt.Dimension;
    import javax.swing.JPanel;
    import org.jfree.chart.*;
    import org.jfree.data.time.*;
    import org.jfree.data.xy.XYDataset;
    import org.jfree.ui.ApplicationFrame;
    import org.jfree.ui.RefineryUtilities;
     
    public class TimeSeriesDemo10 extends ApplicationFrame
    {
     
        public TimeSeriesDemo10(String s)
        {
            super(s);
            XYDataset xydataset = createDataset();
            JFreeChart jfreechart = createChart(xydataset);
            ChartPanel chartpanel = new ChartPanel(jfreechart);
            chartpanel.setPreferredSize(new Dimension(500, 270));
            setContentPane(chartpanel);
        }
     
        private static JFreeChart createChart(XYDataset xydataset)
        {
            JFreeChart jfreechart = ChartFactory.createTimeSeriesChart("Time Series Demo 10", "Time", "Value", xydataset, true, true, false);
            return jfreechart;
        }
     
        private static XYDataset createDataset()
        {
            TimeSeries timeseries = new TimeSeries("Per Minute Data", org.jfree.data.time.Minute.class);
            Hour hour = new Hour();
            timeseries.add(new Minute(1, hour), 10.199999999999999D);
            timeseries.add(new Minute(3, hour), 17.300000000000001D);
            timeseries.add(new Minute(9, hour), 14.6D);
            timeseries.add(new Minute(11, hour), 11.9D);
            timeseries.add(new Minute(15, hour), 13.5D);
            timeseries.add(new Minute(19, hour), 10.9D);
            TimeSeriesCollection timeseriescollection = new TimeSeriesCollection(timeseries);
            return timeseriescollection;
        }
     
        public static JPanel createDemoPanel()
        {
            JFreeChart jfreechart = createChart(createDataset());
            return new ChartPanel(jfreechart);
        }
     
        public static void main(String args[])
        {
            TimeSeriesDemo10 timeseriesdemo10 = new TimeSeriesDemo10("Time Series Demo 10");
            timeseriesdemo10.pack();
            RefineryUtilities.centerFrameOnScreen(timeseriesdemo10);
            timeseriesdemo10.setVisible(true);
        }
    }

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 27
    Par défaut
    Merci bcp , sauf que moi je voudrais à la place de " new Minute(1, hour)" , afficher le champ de date de Ma Base de donnée.

    Merci infiniment de m'aider.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 27
    Par défaut
    voilà ce que j'ai testé et ça ne marche pas :

    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
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    package date;
     
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.Date;
     
    import org.jfree.chart.ChartFactory;
    import org.jfree.chart.ChartPanel;
    import org.jfree.chart.JFreeChart;
    //import org.jfree.data.time.Hour;
    import org.jfree.data.time.Minute;
    import org.jfree.data.time.TimeSeries;
    import org.jfree.data.time.TimeSeriesCollection;
    import org.jfree.ui.ApplicationFrame;
    import org.jfree.ui.RefineryUtilities;
     
    /**
     * A demo showing a time series with per minute data.
     *
     */
    public class MinuteTest extends ApplicationFrame {
     
        /**
             * 
             */
     
     
    	private static final long serialVersionUID = 1L;
     
    	/**
         * A demonstration application.
         *
         * @param title  the frame title.
             * @throws SQLException 
         */
        public MinuteTest(final String title) throws SQLException {
     
        	super(title);
        	String url = "jdbc:mysql://localhost:3306/test";
        	String username = "root";
        	String password = null ;
     
        	try{
            		Class.forName("com.mysql.jdbc.Driver");
            	}
            	catch (ClassNotFoundException e){
            		System.out.println("Pilote non retrouvé");
            	}
     
            	Statement stmt = null;
    			try {
     
         	       Connection con = DriverManager.getConnection(url,username,password);
         	       stmt = con.createStatement();
         	    }
         	    catch (SQLException sqle){System.out.println("Erreur de requete");}	
     
         	    //ResultSet rs = (ResultSet) stmt.executeQuery("select * from CPU");	
     
     
     
     
     
     
            final TimeSeries series = new TimeSeries("Per Minute Data", Minute.class);
     
            try {
     
     	       Connection con = DriverManager.getConnection(url,username,password);
     	       stmt = con.createStatement();
     	    }
     	    catch (SQLException sqle){System.out.println("Erreur de requete");}	
     
     	    ResultSet rs = (ResultSet) stmt.executeQuery("select * from cpu");
     
     	   //final Hour hour = new Hour();
     
     	   while(rs.next()){
     
    	    Date v1=rs.getDate("datex");
    	    double v2=rs.getDouble("value1");
     
    	    series.add(new Minute(v1), v2);
    	  //series.add(new Minute(3, hour), 17.3);
          //series.add(new Minute(9, hour), 14.6);
          //series.add(new Minute(11, hour), 11.9);
          //series.add(new Minute(15, hour), 13.5);
          //series.add(new Minute(19, hour), 10.9);
     
    	    }
    	    rs.close();
            final TimeSeriesCollection dataset = new TimeSeriesCollection(series);
     
            final JFreeChart chart = ChartFactory.createTimeSeriesChart(
                "Time Series Demo 10",
                "Time", 
                "Value",
                dataset,
                true,
                true,
                false
            );
            final ChartPanel chartPanel = new ChartPanel(chart);
            chartPanel.setPreferredSize(new java.awt.Dimension(600, 300));
            setContentPane(chartPanel);
     
        }
     
     
        public static void main(final String[] args) throws SQLException {
     
            final MinuteTest demo = new MinuteTest("Time Series Demo 10");
            demo.pack();
            RefineryUtilities.centerFrameOnScreen(demo);
            demo.setVisible(true);
     
        }
     
    }
    l'erreur qui s'affiche :
    Exception in thread "main" org.jfree.data.general.SeriesException: You are attempting to add an observation for the time period Thu Jan 01 00:00:00 CET 1970 but the series already contains an observation for that time period. Duplicates are not permitted. Try using the addOrUpdate() method.
    at org.jfree.data.time.TimeSeries.add(TimeSeries.java:528)
    at org.jfree.data.time.TimeSeries.add(TimeSeries.java:573)
    at org.jfree.data.time.TimeSeries.add(TimeSeries.java:558)
    at date.MinuteTest.<init>(MinuteTest.java:127)
    at date.MinuteTest.main(MinuteTest.java:172)
    merci de m'aider svp

Discussions similaires

  1. Afficher ue image dans une page jsp appartir d'un ficher xml
    Par Mohcine.nb dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 19/05/2014, 10h59
  2. Afficher un PowerPoint dans une page Jsp
    Par goprok dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 11/03/2014, 21h47
  3. [JFreeChart] affichage d'un graphe dans une page jsp
    Par mokhtarmaroc dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 08/09/2007, 23h13
  4. afficher l'arborescence dans une page jsp
    Par Ssimo dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 17/05/2007, 11h58
  5. afficher une fenetre dos dans une page jsp
    Par youp_db dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 13/10/2006, 17h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo