import java.io.File;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
import org.apache.commons.beanutils.DynaBean;
import org.apache.commons.beanutils.RowSetDynaClass;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.time.Millisecond;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
public class TimeSeries_jdbc_dynamic {
public static void main(String[] args) {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection("jdbc:odbc:MY_DB_DSN", "USER", "PASSWORD");
Statement stmt = con.createStatement();
String sql = Some_Query_That_Gives_Tabbed_Results;
ResultSet rs = stmt.executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();
int numberOfColumns = rsmd.getColumnCount();
String tempString = null;
Vector headers = new Vector(15) ;
for (int i=1 ;i <= numberOfColumns; i++){
tempString = new String ((String) rsmd.getColumnLabel(i));
headers.add(tempString);
}
TimeSeriesCollection dataset = new TimeSeriesCollection();
RowSetDynaClass rsdc = new RowSetDynaClass(rs);
List rowset = rsdc.getRows();
for (int i=1;i < numberOfColumns; i++)
{
TimeSeries newSeries = new TimeSeries((String) headers.get(i), Millisecond.class);
Iterator rowsetIterator = rowset.iterator();
while (rowsetIterator.hasNext()){
String columnName = (String) headers.get(i);
DynaBean row = (DynaBean) rowsetIterator.next();
Number tempValue = (Number) row.get(columnName.toLowerCase());
java.util.Date time = new Date((String) row.get("timestamp"));
newSeries.add(new Millisecond(time), tempValue );
}
dataset.addSeries(newSeries);
} // for (int i=3;i <= numberOfColumns; i++)
JFreeChart chart = ChartFactory.createTimeSeriesChart(
"Analog Chart Test", // Title
"Timestamp", // X-Axis
"Value", // Y-Axis
dataset, // Dataset
true, //show legend
true, //use tooltips
false); //configure chart to generate urls
XYPlot plot = chart.getXYPlot();
DateAxis axis = (DateAxis) plot.getDomainAxis();
axis.setDateFormatOverride(new SimpleDateFormat("hh:mm:ss"));
try {
ChartUtilities.saveChartAsJPEG(new File("TimeSeriesChart_JDBC_dynamic.jpg"), chart, 500, 300);
}catch (IOException e){
System.err.println("problem occurred creating chart");
}
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}