sql >> Database teknologi >  >> RDS >> Mysql

JFreechart-diagram med tid fra SQL-database

Det citerede eksempel ved hjælp af JDBCXYDataset virker også med JDBCCategoryDataset , som vist nedenfor og i dit originale spørgsmål . Brug af JDBCCategoryDataset , "Den første kolonne vil være kategorinavnet og [de] resterende kolonner [vil være] værdier (hver kolonne repræsenterer en serie);" ved hjælp af JDBCXYDataset , "Den første kolonne vil være værdierne for x-aksen og de resterende kolonners y-akse." Som et resultat ville jeg forvente, at din forespørgsel ville være sådan her:

SELECT Date_Time, PV …

Da din domæneakse er tid, kan du overveje at rotere etiketpositionerne, som vist her . Når du beslutter dig, skal du bemærke, at en TimeSeries er mindre fleksibel med hensyn til orientering, men mere fleksibel med hensyn til formatering.

Følgende ændringer af eksemplet illustrere ved hjælp af flydende kommaværdier. Bemærk, at PV er af typen float , og PreparedStatement bruger 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. Konverter månedsnummer til månedsnavn i PostgreSQL

  2. kalder en mysql-funktion og returnerer varchar i dvale

  3. Hvordan transaction_timestamp() virker i PostgreSQL

  4. Hvad har de olympiske lege, UEFA Euro 2016 fodboldkampe og databaser til fælles?