sql >> データベース >  >> RDS >> Mysql

MysqlDBからJFreechartTimeSeriesCollectionにデータを入力しますか?

    Stringの変換で精度が低下していると思われます Dateに 。この完全な例では、メモリ内に適切なデータベーステーブルを作成し、それを JDBCXYDataset データセットを時系列グラフで表示します。 JDBCXYDatasetに注意してください 時系列データを認識します。チェックとして、JDBCXYDataset 返される日付値が照会されます。

    典型的な1時間ごとのデータ:

    …
    Jul 15, 2014 1:10:25 PM
    Jul 15, 2014 2:10:25 PM
    Jul 15, 2014 3:10:25 PM
    Jul 15, 2014 4:10:25 PM
    Jul 15, 2014 5:10:25 PM
    Jul 15, 2014 6:10:25 PM
    …
    

    コード:

    import java.awt.EventQueue;
    import java.sql.Connection;
    import java.sql.Date;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.sql.Timestamp;
    import java.text.DateFormat;
    import java.util.Calendar;
    import java.util.Random;
    import javax.swing.JFrame;
    import org.jfree.chart.ChartFactory;
    import org.jfree.chart.ChartPanel;
    import org.jfree.chart.JFreeChart;
    import org.jfree.data.jdbc.JDBCXYDataset;
    
    /**
     * @see http://stackoverflow.com/a/24762078/230513
     */
    public class JDBCTest {
    
        private static final int N = 24;
        private static final Random r = new Random();
    
        private void display() {
            JFrame f = new JFrame("JDBCTest");
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            JDBCXYDataset jds = createDataset();
            JFreeChart chart = ChartFactory.createTimeSeriesChart(
                "Inventory", "Date", "Count", jds, true, true, false);
            f.add(new ChartPanel(chart));
            f.pack();
            f.setLocationRelativeTo(null);
            f.setVisible(true);
            for (int i = 0; i < jds.getItemCount(); i++) {
                System.out.println(DateFormat.getDateTimeInstance()
                    .format(new Date(jds.getX(0, i).longValue())));
            }
        }
    
        private JDBCXYDataset createDataset() {
            try {
                Connection conn = DriverManager.getConnection(
                    "jdbc:h2:mem:test", "", "");
                Statement st = conn.createStatement();
                st.execute("create table inventory(when timestamp, n1 integer, n2 integer)");
                PreparedStatement ps = conn.prepareStatement(
                    "insert into inventory values (?, ?, ?)");
                Calendar c = Calendar.getInstance();
                for (int i = 0; i < N; i++) {
                    ps.setTimestamp(1, new Timestamp(c.getTimeInMillis()));
                    ps.setInt(2, N / 3 + r.nextInt(N / 2));
                    ps.setInt(3, N / 2 + r.nextInt(N / 2));
                    ps.execute();
                    c.add(Calendar.HOUR_OF_DAY, 1);
                }
                JDBCXYDataset jds = new JDBCXYDataset(conn);
                jds.executeQuery("select when, n1, n2 from inventory");
                return jds;
            } catch (SQLException ex) {
                ex.printStackTrace(System.err);
            }
            return null;
        }
    
        public static void main(String[] args) {
            EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {
                    new JDBCTest().display();
                }
            });
        }
    }
    



    1. 最適化のしきい値–データのグループ化と集約、パート1

    2. Oracleには、2つの日付の差を計算する関数がありますか?

    3. Access2016でテンプレートからデータベースを作成する方法

    4. SQLServerデータベースにすべてのストアドプロシージャを一覧表示する3つの方法