簡體   English   中英

JDBCCategoryDataset-執行多個查詢

[英]JDBCCategoryDataset - execute multiple queries

我想使用JDBCCategoryDataset類在JFrame中創建三個圖表。

如何給出三個獨立的查詢? 我在數據集對象中給出了三個不同的查詢,但結果是顯示了三個相似的圖表。 另外,它為所有三個查詢執行最后一個查詢。 我已經看到了使用給定默認(靜態)值的DefaultPieDataset完成此操作的方式,但是我想從數據庫動態檢索數據。

我知道我可以創建幾個JDBCCategoryDataset對象嗎? 有沒有更好的辦法?

package barchart;

import Extra.OpenFile;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.SQLException;
import javax.swing.JFrame;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.data.jdbc.JDBCCategoryDataset;
import org.jfree.ui.RefineryUtilities;

public class Chart {
        public static void main(String[] args) throws IOException {

           try {
           JDBCCategoryDataset dataset = new JDBCCategoryDataset(
            "jdbc:mysql://localhost:3306/jobfinder",
            "com.mysql.jdbc.Driver","giannis", "giannis");

           JFrame frame = new JFrame("Charts");
           frame.setLayout(new GridLayout(2,1));

           String query = "";
           query = OpenFile.getContent("query"); //Gets the query from a file
                                                // cause it's big.It's a custom class.
           dataset.executeQuery(query);
           JFreeChart chart =
           ChartFactory.createBarChart3D("Job Statistics", "Posts/Replys", "Quantity",
           dataset, PlotOrientation.VERTICAL, true, true, false);

           chart.setBackgroundPaint(Color.white);
           CategoryPlot plot = (CategoryPlot) chart.getPlot();
           plot.setBackgroundPaint(Color.lightGray);
           plot.setRangeGridlinePaint(Color.white);

           BarRenderer renderer = (BarRenderer) plot.getRenderer();
           renderer.setSeriesPaint(1, Color.CYAN);
           renderer.setSeriesPaint(0, Color.DARK_GRAY);
           renderer.setDrawBarOutline(false);
           renderer.setItemMargin(0.0);

           ChartPanel chartPanel = new ChartPanel(chart, false);
           chartPanel.setPreferredSize(new Dimension(700, 270));

           frame.add(chartPanel);


//               query = "SELECT occuDscr Jobs,COUNT(pstOccuId) Quantity FROM occupation_field " +
//                       "INNER JOIN job_post ON occuId = pstOccuId GROUP BY Jobs";
//               dataset.executeQuery(query);
//               JFreeChart chart1 =
//               ChartFactory.createBarChart3D("Job Statistics", "Posts/Replys", "Quantity",
//               dataset, PlotOrientation.VERTICAL, true, true, false);
//
//               ChartPanel chartPanel1 = new ChartPanel(chart1, false);
//               chartPanel.setPreferredSize(new Dimension(500/2, 270/2));
//
//               frame.add(chartPanel1);
//
//               query = "SELECT occuDscr Jobs,COUNT(usrOccuId) Quantity FROM occupation_field " +
//                       "INNER JOIN users ON occuId = usrOccuId GROUP BY Jobs";
//               dataset.executeQuery(query);
//               JFreeChart chart2 =
//               ChartFactory.createBarChart3D("Job Statistics", "Posts/Replys", "Quantity",
//               dataset, PlotOrientation.VERTICAL, true, true, false);
//
//               ChartPanel chartPanel2 = new ChartPanel(chart2, false);
//               chartPanel.setPreferredSize(new Dimension(500/2, 270/2));
//
//              frame.add(chartPanel2);

           frame.setVisible(true);
           frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
           frame.pack();

           RefineryUtilities.centerFrameOnScreen(frame);

       } catch (FileNotFoundException fe) {
             System.out.println("Error Occurred " + fe.getMessage());
             System.exit(0);
       } catch (IOException ie) {
             System.out.println("Error Occurred " + ie.getMessage());
             System.exit(0);
       } catch (ClassNotFoundException ce) {
             System.out.println("Error Occurred " + ce.getMessage());
             System.exit(0);
      }  catch (SQLException se) {
             System.out.println("Error Occurred " + se.getMessage());
             System.exit(0);
      }
   }
}

從概念上講,最簡單的方法是為每個面板提供自己的特定JDBCCategoryDataset查詢的JDBCCategoryDataset 在此相關示例中 ,每個ThermometerDemo面板都有其自己的DefaultValueDataset

或者,定義一個具有單個JDBCCategoryDataset的類, JDBCCategoryDataset檢索組成三個CategoryDataset實例所需的所有數據,並公開靜態工廠方法,每個方法返回每個餅圖所需的單獨數據集。

附錄:后一種方法假定存在一些有用的啟發式方法,可以區分整個結果集的子集。 例如,這是連續子集的部分實現:

/** @see https://stackoverflow.com/questions/8835974 */
public class MyCategoryDataset implements CategoryDataset{

    private JDBCCategoryDataset set;
    private List subList;

    private MyCategoryDataset(JDBCCategoryDataset set, int first, int last) {
        this.set = set;
        subList = set.getRowKeys().subList(first, first);
    }

    public static CategoryDataset createSubset(
            JDBCCategoryDataset set, int first, int last) {
        return new MyCategoryDataset(set, first, first);
    }

    @Override
    public Comparable getRowKey(int row) {
        return (Comparable) subList.get(row);
    }

    @Override
    public int getRowIndex(Comparable key) {
        return subList.indexOf(key);
    }

    @Override
    public List getRowKeys() {
        return subList;
    }

    // TODO
    //@Override
    //public Comparable getColumnKey(int column) {}
    //
    //@Override
    //public int getColumnIndex(Comparable key) {}
    //
    //@Override
    //public List getColumnKeys() {}
    //
    //@Override
    //public Number getValue(Comparable rowKey, Comparable columnKey) {}
    //
    //@Override
    //public int getRowCount() {}
    //
    //@Override
    //public int getColumnCount() {}
    //
    //@Override
    //public Number getValue(int row, int column) {}
    //
    //@Override
    //public void addChangeListener(DatasetChangeListener listener) {}
    //
    //@Override
    //public void removeChangeListener(DatasetChangeListener listener) {}
    //
    //@Override
    //public DatasetGroup getGroup() {}
    //
    //@Override
    //public void setGroup(DatasetGroup group) {}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM