sql >> Databáze >  >> RDS >> Mysql

Graf JFreechart s časem z databáze SQL

citovaný příklad pomocí JDBCXYDataset funguje také s JDBCCategoryDataset , jak je znázorněno níže a ve vašem původním otázce . Pomocí JDBCCategoryDataset , "První sloupec bude název kategorie a [zbývající] sloupce [budou] hodnoty (každý sloupec představuje řadu);" pomocí JDBCXYDataset , "První sloupec bude osa x a zbývající sloupce hodnoty osy y." V ​​důsledku toho bych očekával, že váš dotaz bude vypadat takto:

SELECT Date_Time, PV …

Protože vaší doménovou osou je čas, zvažte otočení pozic štítků, jak je znázorněno zde . Při rozhodování mějte na paměti, že TimeSeries je méně flexibilní, pokud jde o orientaci, ale flexibilnější, pokud jde o formátování.

Následující změny příklad ilustrujte pomocí hodnot s pohyblivou řádovou čárkou. Všimněte si, že PV je typu float a PreparedStatement používá 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. ORA-24550:signál přijat:chyba [si_signo=6]

  2. MySql count() vrátí 0, pokud nebyly nalezeny žádné záznamy

  3. Správa uživatelských účtů, role, oprávnění, autentizace PHP a MySQL

  4. MySQL JOIN pro nahrazení ID hodnotami z jiné tabulky