Mysql
 sql >> Datenbank >  >> RDS >> Mysql

JFreechart-Diagramm mit Zeit aus der SQL-Datenbank

Das Beispiel zitiert mit JDBCXYDataset funktioniert auch mit JDBCCategoryDataset , wie unten und in Ihrer ursprünglichen Frage gezeigt . Verwenden von JDBCCategoryDataset , "Die erste Spalte wird der Kategoriename sein und [die] verbleibenden Spalten [werden] Werte sein (jede Spalte repräsentiert eine Serie);" mit JDBCXYDataset , "Die erste Spalte enthält die x-Achse und die restlichen Spalten die y-Achsenwerte. " Als Ergebnis würde ich erwarten, dass Ihre Abfrage etwa so lautet:

SELECT Date_Time, PV …

Da Ihre Domain-Achse die Zeit ist, ziehen Sie in Betracht, die Label-Positionen zu drehen, wie hier gezeigt . Beachten Sie bei der Entscheidung, dass eine TimeSeries ist weniger flexibel in Bezug auf die Ausrichtung, aber flexibler in Bezug auf die Formatierung.

Die folgenden Änderungen am Beispiel anhand von Fließkommawerten veranschaulichen. Beachten Sie, dass PV ist vom Typ float , und das PreparedStatement verwendet setFloat() .

JDBCCategoryDataset jds = createDataset();
JFreeChart chart = ChartFactory.createLineChart("Test", "Time", "PV",
    jds,PlotOrientation.VERTICAL, true, true, false);
CategoryPlot plot = (CategoryPlot) chart.getPlot();
CategoryAxis domain = plot.getDomainAxis();
plot.getDomainAxis().setCategoryLabelPositions(CategoryLabelPositions.UP_45);
…
private JDBCCategoryDataset createDataset() {
    try {
        Connection conn = DriverManager.getConnection(
            "jdbc:h2:mem:test", "", "");
        Statement st = conn.createStatement();
        st.execute("create table data(when timestamp, pv float)");
        PreparedStatement ps = conn.prepareStatement(
            "insert into data values (?, ?)");
        Calendar c = Calendar.getInstance();
        for (int i = 0; i < N; i++) {
            ps.setTimestamp(1, new Timestamp(c.getTimeInMillis()));
            ps.setFloat(2, (float)r.nextGaussian() + 2);
            ps.execute();
            c.add(Calendar.SECOND, r.nextInt(60 * 60));
        }
        JDBCCategoryDataset jds = new JDBCCategoryDataset(conn);
        jds.executeQuery("select when, pv from data");
        return jds;
    } catch (SQLException ex) {
        ex.printStackTrace(System.err);
    }
    return null;
}