在Java中将重复值导入到折线图
我有一个数据库,里面有很多表空间。每天凌晨3:00备份所有表空间的已用空间和可用空间。所有备份都存储在一个名为TBS_SIZE的表中,该表包含TBS_名称、已用空间、可用空间和备份日期列 我需要像下面这样用Java将值放到折线图中。但问题是,价值观每天都在重复。因为所有的表空间名称每天都会被重新写入。因此,我的一些专栏正在循环。让我举一个例子:在Java中将重复值导入到折线图,java,sql,Java,Sql,我有一个数据库,里面有很多表空间。每天凌晨3:00备份所有表空间的已用空间和可用空间。所有备份都存储在一个名为TBS_SIZE的表中,该表包含TBS_名称、已用空间、可用空间和备份日期列 我需要像下面这样用Java将值放到折线图中。但问题是,价值观每天都在重复。因为所有的表空间名称每天都会被重新写入。因此,我的一些专栏正在循环。让我举一个例子: system | 50 | 1 | 12/01/2013 tmp | 43 | 8 | 12/01/2013 users | 80 | 2
system | 50 | 1 | 12/01/2013
tmp | 43 | 8 | 12/01/2013
users | 80 | 2 | 12/01/2013
system | 50 | 1 | 13/01/2013
tmp | 45 | 6 | 13/01/2013
users | 77 | 5 | 13/01/2013
我需要一个有用的想法,或者一个可以帮助我的参考资料 我想结帐:
以下是一些编辑的网站外示例:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.stage.Stage;
public class LineChartSample extends Application {
@Override public void start(Stage stage) {
stage.setTitle("Line Chart Sample");
final CategoryAxis xAxis = new CategoryAxis();
final NumberAxis yAxis = new NumberAxis();
xAxis.setLabel("Month");
final LineChart<String,Number> lineChart =
new LineChart<String,Number>(xAxis,yAxis);
lineChart.setTitle("Tablespaces, 2010");
//query your data here and prepare to insert it into the chart
XYChart.Series series1 = new XYChart.Series();
series1.setName("system ");
series1.getData().add(new XYChart.Data("Jan", 23));
series1.getData().add(new XYChart.Data("Feb", 14));
series1.getData().add(new XYChart.Data("Mar", 15));
series1.getData().add(new XYChart.Data("Apr", 24));
series1.getData().add(new XYChart.Data("May", 34));
series1.getData().add(new XYChart.Data("Jun", 36));
series1.getData().add(new XYChart.Data("Jul", 22));
series1.getData().add(new XYChart.Data("Aug", 45));
series1.getData().add(new XYChart.Data("Sep", 43));
series1.getData().add(new XYChart.Data("Oct", 17));
series1.getData().add(new XYChart.Data("Nov", 29));
series1.getData().add(new XYChart.Data("Dec", 25));
XYChart.Series series2 = new XYChart.Series();
series2.setName("tmp");
series2.getData().add(new XYChart.Data("Jan", 33));
series2.getData().add(new XYChart.Data("Feb", 34));
series2.getData().add(new XYChart.Data("Mar", 25));
series2.getData().add(new XYChart.Data("Apr", 44));
series2.getData().add(new XYChart.Data("May", 39));
series2.getData().add(new XYChart.Data("Jun", 16));
series2.getData().add(new XYChart.Data("Jul", 55));
series2.getData().add(new XYChart.Data("Aug", 54));
series2.getData().add(new XYChart.Data("Sep", 48));
series2.getData().add(new XYChart.Data("Oct", 27));
series2.getData().add(new XYChart.Data("Nov", 37));
series2.getData().add(new XYChart.Data("Dec", 29));
//etc.
//create a series for each tbs_name
Scene scene = new Scene(lineChart,800,600);
lineChart.getData().addAll(series1, series2);//then add all series here!
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
其中KeyType是唯一的tbs_名称,ValueType是您创建的一个对象,它只包含三个数据备份_日期、已用空间和可用空间。例如:
public class ClassName{
String backup_date, used_space, free_space;
public ClassName(String backup_date, String used_space, String free_space){
this.backup_date = backup_date;
this.used_space = used_space;
this.free_space = free_space;
}
//write rest of the methods
}
在您链接的示例中,它构成了自己的数据:
/*
* retrieve stock prices out of a randomDB
*/
private double[] getStockData(String name) {
Random random = new Random(System.currentTimeMillis());
double[] data = new double[MINUTES_BACK];
double start = random.nextDouble() * 1000.0 + 1.0;
for (int i = 0; i < data.length; i++) {
start += start * 0.4 * random.nextGaussian();
if(start < 0) start = - start;
data[i] = start;
}
return data;
}
您只需要找到一种方法,用您自己的数据替换此随机算法,无论数据来源是什么。那么您需要显示什么值?每天所有tbs_名称的总使用空间?类似这样的SQL查询如何:尝试以下SQL选择“使用空间总和”、“按备份日期从tbs_大小组备份日期”这将为您提供总空间日期。然后您可以在Java中提取这些数据…我需要每天查看值,而不是总大小。上面的查询将显示每天使用的总空间值。。根据你的例子,第12位显示173,第13位显示172。这不是你想看到的吗?哦,我一开始没读你的问题。我需要查看每个表空间的值。您的示例为+1,但这并不能解决我的问题。因为结果集是逐行读取的。我需要使用至少3-4个查询。这很好。只需先生成数据,然后进行组织。一旦组织起来,您就可以通过循环和方法生成创建这些系列的系统方法。
/*
* retrieve stock prices out of a randomDB
*/
private double[] getStockData(String name) {
Random random = new Random(System.currentTimeMillis());
double[] data = new double[MINUTES_BACK];
double start = random.nextDouble() * 1000.0 + 1.0;
for (int i = 0; i < data.length; i++) {
start += start * 0.4 * random.nextGaussian();
if(start < 0) start = - start;
data[i] = start;
}
return data;
}