sql >> Database >  >> RDS >> Mysql

JFreechart-diagram met tijd uit SQL Database

Het geciteerde voorbeeld met behulp van JDBCXYDataset werkt ook met JDBCCategoryDataset , zoals hieronder weergegeven en in uw originele vraag . JDBCCategoryDataset gebruiken , "De eerste kolom is de categorienaam en [de] overige kolommen [zullen] waarden zijn (elke kolom vertegenwoordigt een reeks);" met behulp van JDBCXYDataset , "De eerste kolom is de x-as en de overige kolommen zijn de y-aswaarden." Als resultaat verwacht ik dat uw zoekopdracht er ongeveer zo uit zal zien:

SELECT Date_Time, PV …

Aangezien uw domeinas tijd is, kunt u overwegen de labelposities te roteren, zoals hier wordt weergegeven . Houd er bij de beslissing rekening mee dat een TimeSeries is minder flexibel wat betreft oriëntatie, maar flexibeler wat betreft opmaak.

De volgende wijzigingen in het voorbeeld illustreren met behulp van drijvende-kommawaarden. Merk op dat PV is van het type float , en de PreparedStatement gebruikt 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;
}



  1. Sortering op serverniveau van actieve SQL Server-instantie wijzigen

  2. xampp mysql Kan multi-masterstructuren niet initialiseren

  3. php - Gebruikers in staat stellen om favoriete berichten te plaatsen

  4. mysql ERROR 2002 (HY000):Kan geen verbinding maken met lokale MySQL-server via socket '/var/run/mysqld/mysqld.sock' (2)