DBからチャート生成のためのデータを読み込む(JFreechart 0.9.21)
JFreeChartには,チャート作成のためのデータをDBからデータを読み込むクラスがある.これを使用すると,比較的楽にDBのデータをグラフ化するJavaプログラムを作成することができる.
JFreeChart-0.9.21では,内部でJDBCを使用してデータを読み込むDatasetがある.
このサンプルはPostgreSQLのJDBCドライバを使用する.他のDBを使用する場合は,定数JDBC_DIRVERを書き換えて試されたい.コンパイルして実行してみる(※).
- org.jfree.data.jdbc.JDBCXYDataset;
- org.jfree.data.jdbc.JDBCPieDataset;
- org.jfree.data.jdbc.JDBCCategoryDataset;
$ javac -classpath ./:./jfreechart-0.9.21.jar:jcommon-0.9.6.jar SampleReadByJDBC.java $ java -cp ./:./jfreechart-0.9.21.jar:./jcommon-0.9.6.jar:./postgresql-jdbc2.jar \ SampleReadByJDBC jdbc:postgresql://dbserver/firstdb matsu hogefuga xy当然ながらDBのURL,ユーザ,パスワードは環境に応じて書き換える.最後の引数は先述の3つのDatsetを切替えるために使用している.xyの場合は,DBからXYDatasetのデータを作成する.
※ サンプル実行のためのテーブル,データ作成のSQLを以下に示す.
もう一度,JFreeChart-0.9.21では,内部でJDBCを使用してデータを読み込むDatasetがある.
- org.jfree.data.jdbc.JDBCXYDataset;
- org.jfree.data.jdbc.JDBCPieDataset;
- org.jfree.data.jdbc.JDBCCategoryDataset;
- CategoryDataset用データ読み込みSQL
- 選択されるフィールドは最低二つ.一つ目はカテゴリ名に使用され,残りは値として使用される.
private static final String CATEGORY_SQL = "SELECT category, avg(y1_value) AS Y1_AVG, \ avg(y2_value) AS Y2_AVG, avg(y3_value) AS Y3_AVG \ FROM sample_data GROUP BY category;";
ASを使用してフィールド名を変えているのは,JDBCCategoryDatasetがフィールド名を使用してシリーズを識別しているためである.上のSQLの場合,ASがなければ二つ目以降のフィールド名が皆avgになって,1シリーズしか認識されない.
- PieDataset用データ読み込みSQL
- 選択されるフィールドは二つ.一つ目はVARCHARでカテゴリ名に使用され,残りは値として使用される.
private static final String PIE_SQL = "SELECT category, count(category) FROM sample_data GROUP BY category;";
- XYDataset用データ読み込みSQL
- 選択されるフィールドは最低二つ.一つ目はX軸値として使用され,残りはY軸値として使用される.
private static final String XY_SQL = "SELECT x_value, y1_value, y2_value, y3_value FROM sample_data;";
JDBCXYDatasetでは,横軸を時間軸にしたTimeSriesChartを作成することができる.以下にサンプルを示す.
先のサンプルとの相違点は,SQL文とチャート作成時に以下を使用する点である.
} else if (xyDataset != null) {
myChart = ChartFactory.createTimeSeriesChart ("SampleReadByJDBC2 - XYDataset -",
"domain",
"range",
xyDataset,
true, true, true);
}
JDBCXYDatasetは,SELECT結果の第一フィールドがDATE型だと,isTimeSeriesメソッドの返り値がtrueとなる.すなわち,内部でSELECTフィールドの第一フィールドがTimeSeriesかどうかを自動認識する.サンプルを実行した結果を以下に示す.
$ javac -classpath ./:./jfreechart-0.9.21.jar:jcommon-0.9.6.jar SampleReadByJDBC2.java $ java -cp ./:./jfreechart-0.9.21.jar:./jcommon-0.9.6.jar:./postgresql-jdbc2.jar \ SampleReadByJDBC2 jdbc:postgresql://thor/firstdb matsu hogefuga xy
※ サンプル実行のためのテーブル,データ作成のSQLを以下に示す.

