# Result Set in Charts ausgeben!



## SammyS (13. Nov 2007)

Guten Tag. 

Ich bin gerade am erlernen, wie ich aus java-code charts herstelle. Dabei habe ich mich des Demos(BarChartDemo1) von jfreecharts bedient. Grundsätzlich ist es ein Super tool zum Einstieg. Ich habe das Demo großteils nach meinen Bedürfnissen modifiziert und jetzt stellt sich ein kleines Problem. 

Jetzt hätte ich folgende Frage, und zwar: Wie kann ich jetzt den vorgegebenen Datensatz ändern, um genau zu sein, wie kann ich den Quellcode so ändern, dass er aus einen Resultset (Datenbank Derby) liest und dann anschließend die mitgelieferten Daten im Chart ausgibt? 

Ich hoffe im habe mich halbwegs verständlich ausgedrückt?  

Ich wäre für jeden hilfreichen Tipp sehr dankbar 

Mit freundlichen Grüssen 

SammyS

_________________
Ich denke, also bin ich!
	
	
	
	





```
/* ===========================================================
 * JFreeChart : a free chart library for the Java(tm) platform
 * ===========================================================
 *
 * (C) Copyright 2000-2007, by Object Refinery Limited and Contributors.
 *
 * Project Info:  [url]http://www.jfree.org/jfreechart/index.html[/url]
 *
 * This library is free software; you can redistribute it and/or modify it 
 * under the terms of the GNU Lesser General Public License as published by 
 * the Free Software Foundation; either version 2.1 of the License, or 
 * (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful, but 
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 
 * License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
 * USA.  
 *
 * [Java is a trademark or registered trademark of Sun Microsystems, Inc. 
 * in the United States and other countries.]
 *
 * ------------------
 * BarChartDemo1.java
 * ------------------
 * (C) Copyright 2003-2007, by Object Refinery Limited and Contributors.
 *
 * Original Author:  David Gilbert (for Object Refinery Limited);
 * Contributor(s):   ;
 *
 * $Id: BarChartDemo1.java,v 1.1.2.4 2007/03/02 10:45:23 mungady Exp $
 *
 * Changes
 * -------
 * 09-Mar-2005 : Version 1 (DG);
 *
 */

package org.jfree.chart.demo;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GradientPaint;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;

/**
 * A simple demonstration application showing how to create a bar chart.
 */
public class BarChartDemo1 extends ApplicationFrame {

    /**
     * Creates a new demo instance.
     *
     * @param title  the frame title.
     */
    public BarChartDemo1(String title) {
        super(title);
        CategoryDataset dataset = createDataset();
        JFreeChart chart = createChart(dataset);
        ChartPanel chartPanel = new ChartPanel(chart, false);
        chartPanel.setPreferredSize(new Dimension(500,270));
        setContentPane(chartPanel);
    }

    /**
     * Returns a sample dataset.
     * 
     * @return The dataset.
     */
    private static CategoryDataset createDataset() {
        
        // row keys...
        String series1 = "First";
        String series2 = "Second";
        String series3 = "Third";

        // column keys...
        String category1 = "Category 1";
        String category2 = "Category 2";
        String category3 = "Category 3";
        String category4 = "Category 4";
        String category5 = "Category 5";

        // create the dataset...
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(1.0, series1, category1);
        dataset.addValue(4.0, series1, category2);
        dataset.addValue(3.0, series1, category3);
        dataset.addValue(5.0, series1, category4);
        dataset.addValue(5.0, series1, category5);

        dataset.addValue(5.0, series2, category1);
        dataset.addValue(7.0, series2, category2);
        dataset.addValue(6.0, series2, category3);
        dataset.addValue(8.0, series2, category4);
        dataset.addValue(4.0, series2, category5);

        dataset.addValue(4.0, series3, category1);
        dataset.addValue(3.0, series3, category2);
        dataset.addValue(2.0, series3, category3);
        dataset.addValue(3.0, series3, category4);
        dataset.addValue(6.0, series3, category5);
        
        return dataset;
        
    }
    
    /**
     * Creates a sample chart.
     * 
     * @param dataset  the dataset.
     * 
     * @return The chart.
     */
    private static JFreeChart createChart(CategoryDataset dataset) {
        
        // create the chart...
        JFreeChart chart = ChartFactory.createBarChart(
            "Bar Chart Demo 1",       // chart title
            "Category",               // domain axis label
            "Value",                  // range axis label
            dataset,                  // data
            PlotOrientation.VERTICAL, // orientation
            true,                     // include legend
            true,                     // tooltips?
            false                     // URLs?
        );

        // NOW DO SOME OPTIONAL CUSTOMISATION OF THE CHART...

        // set the background color for the chart...
        chart.setBackgroundPaint(Color.white);

        // get a reference to the plot for further customisation...
        CategoryPlot plot = (CategoryPlot) chart.getPlot();
        plot.setBackgroundPaint(Color.lightGray);
        plot.setDomainGridlinePaint(Color.white);
        plot.setDomainGridlinesVisible(true);
        plot.setRangeGridlinePaint(Color.white);

        // ******************************************************************
        //  More than 150 demo applications are included with the JFreeChart
        //  Developer Guide...for more information, see:
        //
        //  >   [url]http://www.object-refinery.com/jfreechart/guide.html[/url]
        //
        // ******************************************************************
        
        // set the range axis to display integers only...
        final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
        rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());

        // disable bar outlines...
        BarRenderer renderer = (BarRenderer) plot.getRenderer();
        renderer.setDrawBarOutline(false);
        
        // set up gradient paints for series...
        GradientPaint gp0 = new GradientPaint(0.0f, 0.0f, Color.blue, 
                0.0f, 0.0f, new Color(0, 0, 64));
        GradientPaint gp1 = new GradientPaint(0.0f, 0.0f, Color.green, 
                0.0f, 0.0f, new Color(0, 64, 0));
        GradientPaint gp2 = new GradientPaint(0.0f, 0.0f, Color.red, 
                0.0f, 0.0f, new Color(64, 0, 0));
        renderer.setSeriesPaint(0, gp0);
        renderer.setSeriesPaint(1, gp1);
        renderer.setSeriesPaint(2, gp2);

        CategoryAxis domainAxis = plot.getDomainAxis();
        domainAxis.setCategoryLabelPositions(
                CategoryLabelPositions.createUpRotationLabelPositions(
                        Math.PI / 6.0));
        // OPTIONAL CUSTOMISATION COMPLETED.
        
        return chart;
        
    }
    
    /**
     * Starting point for the demonstration application.
     *
     * @param args  ignored.
     */
    public static void main(String[] args) {
        BarChartDemo1 demo = new BarChartDemo1("Bar Chart Demo 1");
        demo.pack();
        RefineryUtilities.centerFrameOnScreen(demo);
        demo.setVisible(true);
    }

}
```
[/code]


----------



## SlaterB (13. Nov 2007)

> wie kann ich den Quellcode so ändern

durch etwas was sich programmieren nennt,
was soll man dazu sagen, außer es dir komplett zu programmieren?

du musst die Daten laden, an die Chart-Klasse übergeben und diese stellt sie dar, fertig

immerhin noch ein Tipp, wenn das ganze ein Tick aufgeräumter und unabhängiger sein soll:
übergib kein ResultSet oder ähnlich spezifisches,
sondern hole die Daten aus den ResutSet in ein double-Array oder ein Array einer eigenen Klasse falls jeweils String + double zusammengehören,

die Chartklasse muss dann nur mit diesem einfachen Array/ Liste arbeiten,
nicht komplexen JDBC-Code enthalten


----------



## SammyS (13. Nov 2007)

Vielen Dank für die schnelle Antwort.

Ich weiss dass ich noch einigen Nachholbedarf habe 

Hierbei handelt es sich um eine Gruppenarbeit, bei der jeder seinen Part abhandeln muss, und somit ist das Resultset zwingend vorgegeben.

Ich wollte konkret wissen, wo genau ich den neuen Datensatz einspeisen muss, damit es dann weiter ins Diagramm übergeben wird?

Es tut mir leid wenn ich Sie mit meinen Problemen langweile

Hab versucht es zu googlen, aber dadurch dass ich sehr ungeübt mit java bin, klappt es nicht so richtig

Vielen Dank


----------



## SlaterB (13. Nov 2007)

createDataset() braucht offensichtlich einen Parameter oder eine Exemplarvariable, in der die Daten stehen
oder führt schlimmerweise selber die DB-Anfrage aus und kriegt so die Daten,
braucht dann aber vielleicht Parameter für die DB-Anfrage usw, rekursives Problem 

die Parameter oder Exemplarvariablen müssen auch irgendwo herkommen,
letztlich üblicherweise als Parameter des Konstruktors 

und dann hast du eben beim Aufruf 
new BarChartDemo1("Bar Chart Demo 1"); 
das Problem, dass die Daten dann schon vorhanden sein müssen

woher, das ist eine andere Frage


----------



## SammyS (13. Nov 2007)

Vielen Dank.

Werde mich wahrscheinlich noch genauer bzw. noch tiefer Ausholen müssen, um dieses Problem zu lösen.

Aller Anfang ist schwer

Vielen Dank für die Mühe

mfg Sammy


----------



## thE_29 (13. Nov 2007)

In wiefern kannst du den schon programmieren?
Kriegst du ne Verbindung zur DB hin oder weiß du überhaupt wasn ResultSet ist, etc..


----------



## SammyS (13. Nov 2007)

Hallo!
wie gesagt bin ich ein Anfänger in Java. Es handelt sich um eine Gruppenarbeit,bei der jeder einen Part machen muss. Die Daten werden aus der DerbyDatenbank in ein Resultset überführt(macht ein Kollege).Mein Part ist eben aus demResultset eine Grafik zu machen.

Interface etc. ist schon vorgegeben.
Nun wollte ich mich anhand des jfreechart demos BarChartDemo1, hintasten.

Die Frage ist, wie ist die vorgegebenen Daten beiseite lasse(also nicht im Chart ausgebe) und stattdessen Daten eines Resultsets einlese, selektiere(z.b. nur jede Spalte verwende, die einen bestimmten Namen hat etc.) und dann in den Chart umwandle.

Ich hab auch auf der java-api nachgeschaut, also sagen mir die methoden wie next boolean();beforeFirst(); auch ein wenig etc.

Ich hab natürlich gegoogelt etc. es ist leider wenig brauchbares dabei herausgekommen.

Für einen kleinen Tipp wäre ich sehr dankbar

mfg SammyS


----------



## SlaterB (14. Nov 2007)

komm doch endlich mal von dieser fixen JFreeChart-Idee weg,
wenn du die Daten aus dem ResultSet holen willst ist es doch völlig egal, wofür sie verwendet werden,
genauso gut reicht es, sie erstmal mit System.out.println() auszugeben

-----

deine Frage ist also, wie man mit einem ResultSet umgeht

wie du gegoogelt hast, aber dann elementare Operatieon wie next() nicht kennst ist mir ein Rätsel,
aber am Anfang sollte eh ein Lehrbuch stehen:

z.B.
http://www.galileocomputing.de/open...20_006.htm#mje7a96be6a0ebd69c7bc9b4043361ca4d
20.6.2 Ergebnisse einer Abfrage in ResultSet  

bzw. idealerweise das ganze Kapitel dazu,

wenn dir solche ausführlichen Texte mit Beispielen nichts sagen..,
ja dann kannst du nur hoffen, dass es dir hier jemand Stück für Stück erklärt


----------

