sql >> Databasteknik >  >> RDS >> Mysql

JFreechart-diagram med tid från SQL-databas

Det citerade exemplet med JDBCXYDataset fungerar även med JDBCCategoryDataset , som visas nedan och i din ursprungliga fråga . Använder JDBCCategoryDataset , "Den första kolumnen kommer att vara kategorinamnet och [de] återstående kolumnerna [kommer att vara] värden (varje kolumn representerar en serie);" med JDBCXYDataset , "Den första kolumnen kommer att vara x-axeln och de återstående kolumnernas y-axelvärden." Som ett resultat skulle jag förvänta mig att din fråga skulle vara ungefär så här:

SELECT Date_Time, PV …

Eftersom din domänaxel är tid, överväg att rotera etikettpositionerna, som visas här . När du bestämmer dig, notera att en TimeSeries är mindre flexibel när det gäller orientering men mer flexibel när det gäller formatering.

Följande ändringar av exemplet illustrera med hjälp av flyttalsvärden. Observera att PV är av typen float och PreparedStatement använder 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. Omvänd sträng ord för ord med SQL

  2. Hur man beställer genom pivottabelldata i Laravels Eloquent ORM

  3. Implementera twitter och facebook som hashtags

  4. Vad betyder en tidsstämpel i T-Sql i C#?