使用jdbc,我正在查询我的救护车响应时间数据库。我的目标是使用库将输出处理成统计数据。到目前为止,我成功地查询了我的数据库并将响应时间输出到控制台。我的下一步是在统计上处理这个输出,例如平均值、中间值、模式等等。这是我被困在这里的地方。下面是我的代码。
package javaDatabase;
import java.sql.*;
import org.apache.commons.math3.stat.StatUtils;
public class javaConnect3
{
public static void main(String[] args)
{
Connection conn = null;
Statement stmt = null;
try
{
conn = DriverManager
.getConnection("jdbc:sqlserver://myServerAddress;database=myDatabase;integratedsecurity=false;user=myUser;password=myPassword");
stmt = conn.createStatement();
String strSelect = "SELECT M_SecondsAtStatus FROM MManpower WHERE M_tTime > 'august 25, 2014' AND M_Code = 'USAR'";
ResultSet rset = stmt.executeQuery(strSelect);
while (rset.next())
{
int values = rset.getInt("M_SecondsAtStatus");
System.out.println(values);
}
// I am hoping to derive useful statistics from my database, such as the following.
// this uses Jakarta Commons Math
// System.out.println("min: " + StatUtils.min(values));
// System.out.println("max: " + StatUtils.max(values));
// System.out.println("mean: " + StatUtils.mean(values));
// System.out.println("product: " + StatUtils.product(values));
// System.out.println("sum: " + StatUtils.sum(values));
// System.out.println("variance: " + StatUtils.variance(values));
} catch (SQLException ex)
{
ex.printStackTrace();
} finally
{
try
{
if (stmt != null)
stmt.close();
if (conn != null)
conn.close();
} catch (SQLException ex)
{
ex.printStackTrace();
}
}
}} Eclipse中弹出错误消息,变量“value”为红色下划线;“值不能解析为变量”。我不知道怎样才能让这件事奏效。我不明白如何将我的救护车响应时间从数据库输出到ApacheCommons数学将理解的内容。如何让ApacheCommons数学从我的数据库中获取输出并生成一个统计结果?
发布于 2014-08-25 18:26:48
你需要这样的东西:
List<Double> values = new ArrayList<Double>();
while (rset.next()) {
values.add(rset.getInt("M_SecondsAtStatus"));
}
double mean = StatsUtils.mean(values.toArray(new Double [](values.size()));很可能您可以查询数据库中的统计信息。方法的名称取决于数据库:
SELECT avg(M_SecondsAtStatus)
FROM MManpower
WHERE M_tTime > 'august 25, 2014'
AND M_Code = 'USAR'我认为第二个更有效,因为您不必将所有这些值传递给Java来完成与数据库所能做的计算相同的工作。
发布于 2014-08-26 15:51:16
另一种选择是使用DescriptiveStatistics对象收集所有数据,然后使用它计算所需的汇总统计信息。使用它可以减少执行所有显式类型转换和转换的需要:
DescriptiveStatistics ds = new DescriptiveStatistics();
while(rset.next()) {
int observation = rset.getInt("M_SecondsAtStatus");
ds.addValue(observation);
}
System.out.println("min: " + ds.getMin());
System.out.println("max: " + ds.getMax());
...https://stackoverflow.com/questions/25491893
复制相似问题